加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:16:47 所属栏目:百科 来源:网络整理
导读:假设我有一个正确实现了复制构造函数和重载=运算符的c类.通过正确实施,我的意思是他们正在工作并执行深层复制: Class1::Class1(const Class1 class1){ // Perform copy}Class1 Class1::operator=(const Class1 *class1){ // perform copy return *this;} 现
假设我有一个正确实现了复制构造函数和重载=运算符的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引用,而不是指针.
>即使你接受一个指针作为参数,它也应该是const Class1 *来表示该参数不会被修改.
>此复制构造函数效率低(或无法工作!),因为Class1的所有成员都是默认初始化的,然后使用operator =复制
> operator =有同样的问题;它应该接受引用,而不是指针.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读