C++中存放变量的地方有三个,分别是全局/静态变量存储区,局部变量存储区
即栈,new存放的变量存放在堆上,解题的思路是:
如果只在栈上创建对象则禁止在堆上创建,重写operator new 和operator delete
如果只在堆上创建对象则把析构函数定义为私有的,但是一定要定义一个函数把new的
对象删除掉 void distory () const
{
delete this;
}
一、只能在堆上创建对象
}
class A
{
public:
A()
{
cout<<"dhjj"<<endl;
}
void distory () const
{
delete this;
}
private :
~A(){ cout<<"this";}
};
int main()
{
A* a=new A;
a->distory();
return 0;
}
二、只能在栈上创建对象
class A
{
public:
A()
{
cout<<"dhjj"<<endl;
}
~A(){ cout<<"this";}
private:
void* operator new (size_t t);
void operator delete(void *ptr);
};
int main()
{
A* a=new A;
A a;
return 0;
}
如果清楚变量的创建区域这样的问题是很容易解决的。。