這裏是一個混淆了我的代碼:在類的初始化過程中會發生什麼?
#include <iostream>
using namespace std;
class B {
public:
B() {
cout << "constructor\n";
}
B(const B& rhs) {
cout << "copy ctor\n";
}
B & operator=(const B & rhs) {
cout << "assignment\n";
}
~B() {
cout << "destructed\n";
}
B(int i) : data(i) {
cout << "constructed by parameter " << data << endl;
}
private:
int data;
};
B play(B b)
{
return b;
}
int main(int argc, char *argv[])
{
#if 1
B t1;
t1 = play(5);
#endif
#if 0
B t1 = play(5);
#endif
return 0;
}
環境爲g ++ 4.6.0在Fedora 15. 第一個代碼片段輸出如下:
constructor
constructed by parameter 5
copy ctor
assignment
destructed
destructed
destructed
和第2片段代碼輸出是:
constructed by parameter 5
copy ctor
destructed
destructed
爲什麼有三種析構函數被調用的第一個例子,而在第二個它是隻有兩個?
您期望看到多少構造函數?如果沒有足夠的嘗試使用'-fno-elide-constructors'進行編譯,並且gcc不會消除默認情況下執行的一些構造函數調用。 –