我想知道下面的复制构造函数是否有问题?

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)
{}  
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top