要让一个类只能在堆上创建对象可以将其构造函数的访问权限设置为private通过在public访问权限的函数中通过new来创建对象
class A
{
public:
A* GetA()
{
return new A();
}
private:
A()
:_i(0)
{}
int _i;
};
int main()
{
A* pa = NULL;
pa->GetA();
return 0;
}
要让一个类只能在栈上实例化就不能让其使用new
new operator总是先调用operator new,所以我们只要堆new操作符进行重载,并将它声明为private的,就能保证不能再使用new实例化对象,
class A
{
private:
void* operator new(size_t t){}
void operator delete(void* ptr){}
public:
A();
~A();
};