我有一个很长的类,有很多数据成员。我想为它写一个拷贝构造函数。但是,如果我编写自己的复制构造函数,我将无法访问默认的复制构造函数。
我只想修复我自己的复制构造函数中的一些指针。所以我想要一个对象的浅拷贝,这可以通过默认的拷贝构造函数来完成。
当我有自己的复制构造函数时,是否有可能访问默认的复制构造函数?
发布于 2012-09-14 18:57:32
将您不想更改的内容包装在一个结构中,并从它(私下)派生。在复制构造函数中,只需调用基类的复制构造函数。
发布于 2012-09-14 18:57:35
不,您不能同时拥有default和您自己的副本载体。
但是这个问题有两种解决方法:
1将您的指针封装在某个定义了复制语义的类中
示例:
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将一些简单的参数封装在一些简单的结构中
示例:
class A {
public:
A(const A& o) : data(o.data) {
// non trivial part
}
private:
struct Data {
int trivial1;
int trivial2;
...
} data;
int* nontrivialMember;
};我总是选择第一个解决方案。
更新
还有第三个解决方案,与我的第二个非常相似,将你的琐碎部分封装在私有继承的基类中。我还是更喜欢第一种解决方案。
发布于 2012-09-14 18:58:59
最简单的方法是将指针封装到类中,这些类将在其复制构造函数中手动执行“修复”,然后您可以愉快地使用默认的复制构造函数。
https://stackoverflow.com/questions/12423058
复制相似问题