modernize-replace-disallow-copy-and-assign-macro

查找 DISALLOW_COPY_AND_ASSIGN(Type) 的宏展开,并将其替换为已删除的复制构造函数和已删除的赋值运算符。

在 C++11 中引入 delete 关键字之前,将复制构造函数和赋值运算符声明为私有成员是一种常见的做法。这实际上使它们无法用于类的公共 API。

随着 C++11 中 delete 关键字的出现,我们可以放弃复制构造函数和赋值运算符的 private 访问权限,并完全删除这些方法。

当对如下代码运行此检查时

class Foo {
private:
  DISALLOW_COPY_AND_ASSIGN(Foo);
};

它将被转换为:

class Foo {
private:
  Foo(const Foo &) = delete;
  const Foo &operator=(const Foo &) = delete;
};

已知限制

  • 请注意,上面的迁移示例保留了 private 访问说明符。您可能希望运行检查 modernize-use-equals-delete 以获取私有部分中已删除函数的警告。

选项

MacroName

指定将替换其展开的宏名称的字符串。默认值为 DISALLOW_COPY_AND_ASSIGN

请参阅:https://cppreference.cn/w/cpp/language/function#Deleted_functions