对象只能建立在栈上(堆上)

只能建立在栈上:

//禁用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(){}
}

 

posted @ 2015-10-05 12:12  史昊  阅读(300)  评论(0)    收藏  举报