我写了这段代码如下:
#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
但我对结果感到困惑。为什么这个程序可以成功运行?
我认为我的问题不重复。在我的代码中,构造函数在函数完成之前调用析构函数。但是,它在该问题中明确地调用了两次析构函数。
答案 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