gpt4 book ai didi

c++ - 这个构造函数是可以接受的做法吗?

转载 作者:太空狗 更新时间:2023-10-29 19:47:15 26 4
gpt4 key购买 nike

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

Class1::Class1(const Class1 &class1)
{
// Perform copy
}
Class1& Class1::operator=(const Class1 *class1)
{
// perform copy
return *this;
}

现在假设我也有这个构造函数:

Class1::Class1(Class1 *class1)
{
*this = *class1;
}

我的问题是上面的构造函数是可以接受的做法吗?这是我继承和维护的代码。

最佳答案

我会说“不”,原因如下:

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

“重用”operator= 中的复制构造函数的传统方法是 copy-and-swap idiom .我建议以这种方式实现该类。

关于c++ - 这个构造函数是可以接受的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com