这里是一个混淆了我的代码:在类的初始化过程中会发生什么?
#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不会消除默认情况下执行的一些构造函数调用。 –