bugprone-copy-constructor-init¶
查找复制构造函数,其中构造函数没有调用基类的复制构造函数。
class Copyable {
public:
Copyable() = default;
Copyable(const Copyable &) = default;
int memberToBeCopied = 0;
};
class X2 : public Copyable {
X2(const X2 &other) {} // Copyable(other) is missing
};
还会查找基类构造函数没有参数的复制构造函数。
class X3 : public Copyable {
X3(const X3 &other) : Copyable() {} // other is missing
};
在复制构造期间未能正确初始化基类子对象会导致未定义的行为、崩溃、数据损坏或其他意外结果。该检查确保派生类的复制构造函数正确调用基类的复制构造函数,有助于防止错误并提高代码质量。
限制
对于空类,它不会生成警告,因为没有类成员(包括基类子对象)需要担心。
对于复制构造函数私有或已删除的基类,它不会生成警告。
对于使用其他非默认构造函数初始化的基类,它不会生成警告,因为这可能是故意的。
该检查还在某些情况下建议修复建议。