删除此指针时堆栈溢出

Kri*_*Oza 0 c++ stack

我有以下代码,我得到堆栈溢出错误任何人都可以请解释我这里有什么问题.从我的理解,这个指针指向当前对象,所以为什么我不能在析构函数中删除它;

class Object 
{
private:
    static int objCount;
public:
    int getCount()
    {
        int i =10;
        return i++;
    }
    Object()
    {
        cout<< "Obj Created = "<<++objCount<<endl;
        cout <<endl<<this->getCount()<<endl;
    }
    ~Object()
    {
        cout<<"Destructor Called\n"<<"Deleted Obj="<<objCount--<<endl;
        delete this;
    }
};

int Object::objCount = 0;

int _tmain(int argc, _TCHAR* argv[])
{


    {
        Object obj1;
    }

    {

              Object *obj2 = new Object();
    }
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*cia 15

delete this;在课堂上的析构函数.

好吧,delete调用类的析构函数.

delete this;在课堂上的析构函数.

...


<!<!<!Stack Overflow!>!>!>

(对不起,我觉得有必要把这个包括在内......这可能会破坏它的悲伤!

无聊故事的道德,不要delete this;在你的析构函数上(或者根本不做!)

[1]

Object *obj = new Object();
delete obj;
Run Code Online (Sandbox Code Playgroud)

或者更好,只是

Object obj;
Run Code Online (Sandbox Code Playgroud)

[1] @kfsone的答案更准确地指出堆栈溢出实际上是由obj1析构函数触发的.

  • @krish_oza否.它试图一遍又一遍地删除同一个对象.`删除这个;`在析构函数中是一个可怕的想法,因为它实际上*调用*析构函数.(再次,再次 - 正如马克加西亚所说) (2认同)