是否有必要为具有另一个类B的数据成员的类A重载赋值运算符和复制构造函数?

时间:2019-04-05 14:49:11

标签: c++

我有一个类List,它具有类型Vector的指针(我自己的类)。对于此类,我已经重载了赋值运算符并重新定义了复制构造函数。

问题是我不确定是否必须对具有List类型的成员(未动态分配)的新类做相同的事情。

class List {
    Vector *l;
    int len;
    // assignment operator and copy-constructor defined here
}

class Graf_Neorientat : public Graf {
    List L;
    ...
};

1 个答案:

答案 0 :(得分:1)

L类中的成员变量Graf_Neorientat可以像在程序中作为普通变量一样分配和复制。因此,您无需在Graf_Neorientat中再次编写该代码即可在复制L时复制Graf_Neorientat

现在,您可能要问的是,是否需要在Graf_Neorientat中做一些“额外”操作以使其也可复制(并在复制时复制L)。

假设Graf是可复制的(或忽略Graf),答案是否定的。如果您的List类是可复制的,那么您的Graf_Neorientat将是可复制的。编译器将为您隐式定义赋值运算符并复制构造函数,后者将依次调用List来适当地复制L成员。

当然,如果需要,您可以在Graf_Neorientat中自己禁用可复制性,如果您想做其他事情(稀有),还可以定义其他赋值运算符和复制构造函数。但是,正如您的示例中所给出的,Graf_Neorientat可以满足您的期望。