您的位置:首页 > 其它

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

2015-10-05 12:12 204 查看
只能建立在栈上:

//禁用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(){}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: