[面试] 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配 (Very Good! tx)
当我们规定类只能在堆上分配内存时,就可以将析构函数声明为私有的。
如果在栈上分配空间,类在离开作用域时会调用析构函数释放空间,此时无法调用私有的析构函数。
如果在堆上分配空间,只有在delete时才会调用析构函数。
可以添加一个destroy()函数来释放,从而解决不能在析构函数中添加delete的问题。
/** //HeapOnly.cpp #include <iostream> using namespace std; class HeapOnly { public : HeapOnly() { cout << "Structor." << endl; } void destroy() const { cout << "destructor" << endl; delete this; } private : ~HeapOnly() {} }; int main() { HeapOnly *p = new HeapOnly; p->destroy(); // HeapOnly h; // h.Output(); return 0; } **/ //StackOnly.cpp #include <iostream> using namespace std; class StackOnly { public : StackOnly() { cout << "constructor." << endl; } ~StackOnly() { cout << "destructor." << endl; } private : static void* operator new(size_t); }; int main() { StackOnly s; ///okay //StackOnly *p = new StackOnly; ///wrong return 0; }