首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中同时使用默认和自定义复制构造函数?

如何在C++中同时使用默认和自定义复制构造函数?
EN

Stack Overflow用户
提问于 2012-09-14 18:52:54
回答 8查看 2.8K关注 0票数 10

我有一个很长的类,有很多数据成员。我想为它写一个拷贝构造函数。但是,如果我编写自己的复制构造函数,我将无法访问默认的复制构造函数。

我只想修复我自己的复制构造函数中的一些指针。所以我想要一个对象的浅拷贝,这可以通过默认的拷贝构造函数来完成。

当我有自己的复制构造函数时,是否有可能访问默认的复制构造函数?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-09-14 18:57:32

将您不想更改的内容包装在一个结构中,并从它(私下)派生。在复制构造函数中,只需调用基类的复制构造函数。

票数 12
EN

Stack Overflow用户

发布于 2012-09-14 18:57:35

不,您不能同时拥有default和您自己的副本载体。

但是这个问题有两种解决方法:

1将您的指针封装在某个定义了复制语义的类中

示例:

代码语言:javascript
复制
class A {
public:
private:
   int trivial1;
   int trivial2;
   ...
   SomePointer  nontrivialMember;
};

class SomePointer {
public:
  SomePointer(const SomePointer&); // here the non trivial part of A copy semantics
  int* nonTrivialMember;
};

2将一些简单的参数封装在一些简单的结构中

示例:

代码语言:javascript
复制
class A {
public:
   A(const A& o) : data(o.data) {
     // non trivial part
   }
private:
   struct Data {
     int trivial1;
     int trivial2;
     ...
   } data;
   int* nontrivialMember;
};

我总是选择第一个解决方案。

更新

还有第三个解决方案,与我的第二个非常相似,将你的琐碎部分封装在私有继承的基类中。我还是更喜欢第一种解决方案。

票数 7
EN

Stack Overflow用户

发布于 2012-09-14 18:58:59

最简单的方法是将指针封装到类中,这些类将在其复制构造函数中手动执行“修复”,然后您可以愉快地使用默认的复制构造函数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12423058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档