class A
{
public:
A()
{
p = this;
};
~A()
{
if (NULL != p)
{
delete p;
p = NULL;
}
}
A *p;
};
int main(){
A a;
return 0;
}
请问这段程序有什么问题?为什么说回无限递归?如何改正
delete p会调用A::~A(),p又赋值为this,当然会无限递归了。
遇到这种问题可以单步调试,如果单步调试玩不好,可以加一些打印,比如这里,可以在A::~A()的if语句之前加一行打印。
另外,你这个p是要闹哪样?member function内可以直接用this,外面可以用&obj。
把p删掉就行,栈里面的对象超过声明周期自己就会释放掉,释放掉之前会执行析构,析构里delete this,不出错才怪了……
循环调用构造函数,肯定无限递归直到你的栈崩溃为止