只能建立在栈上:
//禁用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(){} }
时间: 2024-10-28 15:18:20