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

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

编辑

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

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

点赞