我已经采取了看看this presentation,在滑动379,它显示了下面的代码(有一些小的改动):为什么代码调用析构函数两次?
#include <iostream>
using namespace std;
struct A
{
A() { cout << "A()" << endl; }
A(int v) { cout << "A(int)" << endl; }
~A() { cout << "~A()" << endl; }
};
struct X
{
X(int v) { a = v; }
X(long v) : a(v) {}
A a;
};
int main()
{
cout << "bad style:" << endl;
{ X slow(int(2)); }
cout << "good style:" << endl;
{ X fast(long(2)); }
}
输出为:
bad style:
A()
A(int)
~A()
~A()
good style:
A(int)
~A()
(此代码是在我的机器上运行,用g ++编译)
现在,我明白了为什么构造函数会在坏风格中调用两次,但为什么析构函数会这样做呢?
好,如果构造函数被调用两次,这意味着有两个对象要销毁。 – GManNickG
如果构造函数被调用两次,则构造两个对象。所以需要销毁两个物体。 – juanchopanza