首页 > 包含自身指针的类

包含自身指针的类

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,不出错才怪了……


循环调用构造函数,肯定无限递归直到你的栈崩溃为止

【热门文章】
【热门文章】