标签:
只能建立在栈上:
//禁用new操作符,变量就只能定义在栈上了,new operator首先调用operator new,把operator new定义为private即可
class A{ private: void* operator new(size_t t){} void operator delete(){} public: A(){} }
只能建立在堆上:
//不能直接调用析构函数,那么就无法在栈上建立对象,在堆上建立对象是间接调用构造函数的,所以可以!
//当然虽然可以在堆上建立对象,但是无法直接调用delete操作了,因为delete要调用析构函数,所以必须
//单独定义析构函数
class A{
public:
void* create(){
return new A();
}
void destroy(){
delete this;
}
protected://干脆把析构和构造都封装起来,只暴露接口
A(){}
~A(){}
}
标签:
原文地址:http://www.cnblogs.com/cq-shihao/p/4855561.html