【发布时间】:2011-08-18 21:24:59
【问题描述】:
我运行这段代码来试验复制构造函数和赋值运算符
class AClass {
private:
int a;
public:
AClass (int a_) : a(a_) {
cout << " constructor AClass(int) " << a << endl;
}
AClass(const AClass & x) : a(x.a) {
cout << " copy constructor AClass(const AClass &) " << a << endl;
}
AClass & operator=(const AClass & x) {
a = x.a;
cout << " AClass& operator=(const AClass &) " << a - endl;
return *this;
}
};
AClass g () {
AClass x(8);
return x;
}
int main () {
cout << " before AClass b = g() " << endl;
AClass b = g();
cout << " after" << endl;
cout << " before AClass c(g()) " << endl;
AClass c (g());
cout << " after" << endl;
}
发现return x;没有出现消息
为什么?
不应该调用复制构造函数或 operator= 吗?
这是输出:
在 AClass b = g() 之前 构造函数 AClass(int) 8 后 在 A 类 c(g()) 之前 构造函数 AClass(int) 8 后【问题讨论】:
-
不要在您的问题中使用
<pre><code>,请选择代码示例并在编辑器中按{}按钮。它在保留原始代码方面做得更好。 -
由于您正在试验,如果您在
g()中将x设为非自动变量,那么知道您可以强制复制可能会有所帮助,例如:AClass *x = new AClass(8); return (*x);。当然,编写这样的代码会让你晋升为 S.S. MemoryLeak 的队长。
标签: c++ return copy-constructor assignment-operator