【发布时间】:2018-11-09 10:53:27
【问题描述】:
我知道有很多关于这个主题的帖子,但我找不到可以完全回答我的问题的帖子。
假设我有一个基类和一个派生类,我为它实现了一个 Cctor 和一个赋值运算符,如下所示:
class Base {
char * name;
....
Base(const Base& other) :name(nullptr) { *this = other }
void operator=(const Base& other) { ... Deep copy of name }
}
class Derived : public Base {
....
Derived(const Derived& other) { *this = other ; }
void operator=(const Derived& other) {
Base::operator=(other);
.....
}
现在我对这个设计有一些疑问。
- 这是适合这种情况的设计吗?
- 如果我在基类和派生类之间有第三个类,但它只包含原始类型,我应该将它们复制到哪里?例如。使用第二类的默认赋值运算符?建一个新的?只在第三层复制它们?
- 我可以类似地在派生类 Cctor 中调用基类 Cctor,而不是赋值运算符。有什么不同?如果我将它们放在这两种方法中,它会尝试复制两次值吗?
编辑:澄清一下,设计是我在项目中给出的。我有指针,所以我必须使用深拷贝。
【问题讨论】:
-
就我个人而言,我会为不必编写任何复制构造函数或复制赋值运算符而拍摄。如果您可以以默认工作的方式编写类,那么您不必担心任何事情。这称为rule of zero