析构函数在构造函数中调用时发生了什么?

时间:2016-11-15 11:11:42

标签: c++

我写了这段代码如下:

#include <iostream>

using namespace std;

class T
{
    public:
    T()
    {
        cout << "bb\n";
        this -> ~T();
        cout << "zz" << endl;
    }
    ~T()
    {
        cout << "hello\n";
    };
};



int main()
{
    T a;
    return 0;
}

被修改

抱歉,它应该是T a;而不是T a(),现在我得到了输出:

bb
hello
zz
hello

但我对结果感到困惑。为什么这个程序可以成功运行?

被修改

我认为我的问题不重复。在我的代码中,构造函数在函数完成之前调用析构函数。但是,它在该问题中明确地调用了两次析构函数。

2 个答案:

答案 0 :(得分:4)

这是未定义的行为:您在尚未完全构造的对象上调用析构函数。

答案 1 :(得分:-2)

当你在构造函数中调用析构函数并且你没有使用delete语句显式删除动态生成的内存时,它就像普通函数调用一样工作。作为参考,我在代码中进行了适当的更改,以便析构函数表现正常。

#include <iostream>
using namespace std;

class T
{public:
    T()
    {
        cout << "bb\n";
        this -> ~T();
        cout << "zz" << endl;
    }
    ~T(){cout << "hello\n";};
};


int main()
{
    T* a= new T();
    return 0;
}

输出:

bb
hello
zz