modernize-use-equals-delete

识别未实现的私有特殊成员函数,并建议使用 = delete 来删除它们。此外,它建议将任何删除的成员函数从 private 部分移到 public 部分。

在 C++11 出现之前,有效“删除”特定函数的主要方法是将其声明为 private,而没有提供定义。这种方法会导致编译器错误(当尝试调用私有函数时)或链接器错误(由于未定义的引用)。

然而,在 C++11 出现之后,出现了一种更常规的方法来实现这一目的。它包括将函数标记为 = delete 并将其保留在类的 public 部分。

为了防止误报,此检查仅在所有其他成员函数都已实现的翻译单元中处于活动状态。该检查将通过引入 = delete 来生成部分修复,但用户负责手动将函数重新定位到 public 部分。

// Example: bad
class A {
 private:
  A(const A&);
  A& operator=(const A&);
};

// Example: good
class A {
 public:
  A(const A&) = delete;
  A& operator=(const A&) = delete;
};
IgnoreMacros

如果将此选项设置为 true(默认值为 true),则该检查不会警告宏中声明的函数。