如果我有一个带有复杂数据成员的基类,比方说 char*
,并且在我的继承链的末尾我有另一个具有相同类型 DM 的类,我是否必须在途中实现所有其他类的 CCTOR?
例如:
动物类:
class Animal
{
int age;
char* name;
Animal() { ... }
Animal(const Animal &animal) { ..deep copying name..}
}
哺乳动物类:
class Mammal : public Animal
{
int height;
Mammal() { ... }
}
马种:
class Horse : public Mammal
{
char* color;
Horse() { ... }
Horse(const Horse &horse ) { ..deep copying color..}
}
我是否需要在 Mammal
中实现 CCTOR,即使它只有一个 int
作为数据成员?
基本上我的问题是:当复制一个复杂对象(由多个类构建)时,编译器是否分别激活每个部分的 CCTOR?
编辑:
明确地说,我想复制一个 Horse
对象。如果我像上面那样写我的代码,它的名字也会被深度复制吗?
最佳答案
不,你不知道。默认情况下(如 Mammal),复制构造函数将调用每个基类的复制构造函数(按顺序),然后是每个成员变量的复制构造函数(按顺序)。因此,Mammal 的复制构造函数很好。
请注意我关于“每个成员变量的复制构造函数”的观点。当然 char*
的复制构造函数什么都不做——但是如果你用合适的复制构造函数将 char*
包装在一个类中,那么 Animal
和Horse
都可以将该类用作它们的成员变量 - 并且不需要它们自己的复制构造函数。
当然,事实上,std::string
已经为您提供了(但我假设您在现实中有更复杂的情况)。
关于c++ - 是否有必要为派生类创建一个复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56398691/