pab*_*blo 8 c++ constructor deep-copy copy-constructor shallow-copy
我有一个很长的班级,有很多成员.我想为它编写复制构造函数.但是如果我编写自己的拷贝构造函数,我就失去了对deafult拷贝构造函数的访问权限.
我只是想在我自己的拷贝构造函数中修复一些指针.所以我希望对象的浅拷贝可以通过默认的拷贝构造函数来完成.
当有我自己的拷贝构造函数时,是否有可能访问默认的拷贝构造函数?
Jam*_*nze 11
在结构中包装您不想更改的内容,并从中私有地派生.在复制构造函数中,只需调用基类的复制构造函数即可.
不,你不能同时拥有默认和自己的复制c-tor.
但是这个问题有两种解决方法:
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;
};
Run Code Online (Sandbox Code Playgroud)
2将平凡的参数包含在一些简单的结构中
例:
class A {
public:
A(const A& o) : data(o.data) {
// non trivial part
}
private:
struct Data {
int trivial1;
int trivial2;
...
} data;
int* nontrivialMember;
};
Run Code Online (Sandbox Code Playgroud)
我总是选择第一个解决方案.
[UPDATE]
还有第三个解决方案,与我的第二个解决方案非常相似,将您的琐碎部分包含在私有继承的基类中.我还是更喜欢第一种解决方案.