我已經採取了看看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