只在堆或栈上生成对象

非原创,不喜无看。

只在堆上生成对象的基本想法是将类的析构函数置为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

posted @ 2013-03-21 21:15  westfly  阅读(136)  评论(0编辑  收藏  举报