这个构造函数是否可以接受?

Rob*_*obb 3 c++ oop copy-constructor

假设我有一个正确实现了复制构造函数和重载=运算符的c ++类.通过正确实施,我的意思是他们正在工作并执行深层复制:

Class1::Class1(const Class1 &class1)
{
  // Perform copy
}
Class1& Class1::operator=(const Class1 *class1)
{
  // perform copy
  return *this;
}
Run Code Online (Sandbox Code Playgroud)

现在让我说我也有这个构造函数:

Class1::Class1(Class1 *class1)
{
   *this = *class1;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是上述构造函数是否可以接受?这是我继承和维护的代码.

rlb*_*ond 7

我会说,"不",原因如下:

  • 传统的复制构造函数接受其参数作为const引用,而不是指针.
  • 即使您接受指针作为参数,它也应该const Class1*表示该参数不会被修改.
  • 此复制构造函数效率低(或无法工作!),因为所有成员Class1都是默认初始化的,然后使用复制operator=
  • operator=有同样的问题; 它应该接受引用,而不是指针.

"重复使用"复制构造函数的传统方法operator=复制和交换习惯用法.我建议以这种方式实现这个类.