只在堆或栈上生成对象
非原创,不喜无看。
只在堆上生成对象的基本想法是将类的析构函数置为private ,考虑下protected是否也可行。
View Code
class OnlyHeapClass { public: OnlyHeapClass(int i):i(i) { } void Destroy() { delete this; // 等效于"OnlyHeapClass::~OnlyHeapClass();", 写 // 成"OnlyHeapClass::~OnlyHeapClass();"更容易理 // 解public成员函数调用private析构函数. } private: ~OnlyHeapClass() { } int i; }; int main() { OnlyHeapClass *pInst = new OnlyHeapClass(100); OnlyHeapClass Inst(10); delete pInst; // pInst ->Destroy(); // 如果类中没有定义Destroy()函数, 而在这里用"delete pInst;"代 // 替"pInst->Destroy();", 则会报错. 因为"delete pInst;"会去调 // 用类的析构函数, 而在类域外调用类的private成员函数必然会报错. return 0; }
只能在栈上创建对象的基本想法是重载new,并将其置为private。
Over