这是有效的 Copy Ctor 吗?
-
19-09-2019 - |
题
我想知道下面的复制构造函数是否有问题?
class A
{
private:
int m;
public:
A(A a){m=a.m}
}
解决方案
两件事情:
复制构造函数必须将引用作为参数,否则它们将无限递归(实际上该语言不允许您声明此类构造函数)
它不会做默认复制构造函数不做的任何事情,但做得很糟糕 - 您应该尽可能在复制构造函数中使用初始化列表。如果默认的复制者做了你想要的事情,不要试图自己编写一个版本 - 你可能只会出错,并且你需要维护它。
其他提示
有3个问题。
首先,你已经忘记了 “;”在第m = A.M的端部,从而代码不会编译。
其次,通过引用优选在传递一些与大小大多数情况下 大于平台上的寄存器的大小。
第三,因为你是不会改变源对象,最好是用const的拥有它。 所以,最后,这是我们所拥有的:
A(const的A&一个):M(A.M){}
的问题是,复制构造被调用由值来传递参数。所以,你必须通过引用(通常是const引用)通过拷贝构造函数的参数,如果你不想要一个非终端递归。一个小问题是,你没有使用初始化列表,而最好初始化成员。固定这两个问题:
A(A const& a)
: m(a.m)
{}
不隶属于 StackOverflow