欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何在C++中实现仅能在栈上创建对象的特殊类设计?

最编程 2024-01-22 18:23:53
...

做法与上面类似,也是将构造函数私有,然后公有出一个静态成员函数,该函数内部创建一个对象然后返回。

还有第一点,禁了构造但没有禁拷贝构造,因此new可以调用拷贝构造创建一个对象,而又不能直接将拷贝构造声明为删除函数,因为传值返回或者外部会用到它创建对象,那该怎么办呢?

由于new是由两部分组成,operator new + 构造(拷贝构造),其中operator new是一个全局函数,可以在类中对它重载一个该类专属的operator new,若重载了,new该类对象时就不会去调用全局,而是去调用类中的,既然在类中又可以将其声明为删除函数,这样new就无法调用operator new了,进而无法在堆上创建对象了。

class StackOnly {
public:
	static StackOnly createrObj() {
		return StackOnly();
	}
private:
	StackOnly() {}
	void* operator new(size_t size) = delete;
};

int main() {
	StackOnly hp3 = StackOnly::createrObj();;
	return 0;
}