【发布时间】:2023-03-30 20:25:02
【问题描述】:
谁能解释一下为什么这里的复制构造函数被调用了两次?
class A
{
int i;
public:
A(){cout<<"IN constr"<<endl;};
A(int x):i(x) {};
A (A &a)
{
cout<<"in copy"<<endl;
i= a.i;
}
};
class MyClass {
A var;
public:
MyClass(A a):var(a) {
}
};
int main() {
A a1;
MyClass m(a1);
return 0;
}
当我运行代码时:
IN constr
in copy
in copy
我可以理解一次将a复制到变量var,但是当它被第二次调用时?
【问题讨论】:
-
第一个副本 - 按值传递给
MyClass的构造函数的对象;第二次 - 成员变量var被复制初始化。 -
为了避免一个副本,您可以让 MyClass 接受 A 的引用,而不是按值.. MyClass(A& a):var(a)
标签: c++