我有一个类List
,它具有类型Vector
的指针(我自己的类)。对于此类,我已经重载了赋值运算符并重新定义了复制构造函数。
问题是我不确定是否必须对具有List
类型的成员(未动态分配)的新类做相同的事情。
class List {
Vector *l;
int len;
// assignment operator and copy-constructor defined here
}
class Graf_Neorientat : public Graf {
List L;
...
};
答案 0 :(得分:1)
L
类中的成员变量Graf_Neorientat
可以像在程序中作为普通变量一样分配和复制。因此,您无需在Graf_Neorientat
中再次编写该代码即可在复制L
时复制Graf_Neorientat
。
现在,您可能要问的是,是否需要在Graf_Neorientat
中做一些“额外”操作以使其也可复制(并在复制时复制L
)。
假设Graf
是可复制的(或忽略Graf
),答案是否定的。如果您的List
类是可复制的,那么您的Graf_Neorientat
将是可复制的。编译器将为您隐式定义赋值运算符并复制构造函数,后者将依次调用List
来适当地复制L
成员。
当然,如果需要,您可以在Graf_Neorientat
中自己禁用可复制性,如果您想做其他事情(稀有),还可以定义其他赋值运算符和复制构造函数。但是,正如您的示例中所给出的,Graf_Neorientat
可以满足您的期望。