禁止栈上分配, 可将析构函数私有。
automatic duration与static duration的对象都需要访问析构函数。
若析构函数私有, 会产生编译错误。
不过 delete 也不能用了, 因为它也需要访问析构函数。
需要另外提供回收内存空间的函数,以防内存泄漏。
禁止堆上分配, 可将 T:: operator new 全部私有。
automatic duration与static duration的对象都需要访问析构函数。
若析构函数私有, 会产生编译错误。
不过 delete 也不能用了, 因为它也需要访问析构函数。
需要另外提供回收内存空间的函数,以防内存泄漏。
禁止堆上分配, 可将 T:: operator new 全部私有。
c++ code
//HeapOnly.cpp #include<iostream> using namespace std; classHeapOnly{ public:HeapOnly() { cout <<"constructor."<<endl;} void destroy() const{delete this; } private:~HeapOnly() {} }; int main() { HeapOnly *p = new HeapOnly; p->destroy(); //HeapOnly h; // h.Output(); return 0; } |
//StackOnly.cpp//2005.07.18------2009.06.05 #include<iostream> using namespace std; classStackOnly{ public:StackOnly() { cout <<"constructor."<<endl;} ~StackOnly() { cout<<"destructor."<<endl;} private:void* operatornew(size_t);}; int main() { StackOnly s; //okay StackOnly *p = new StackOnly;//wrong return0; } |