访问控制对于已删除的构造函数是否重要?

Does access control matter for deleted constructors?

本文关键字:是否 构造函数 删除 访问控制      更新时间:2023-10-16

显式删除的构造函数是publicprotected还是private之间行为是否有区别?

例如,不可复制的类将具有已删除的复制构造函数(以及已删除的复制赋值)。构造函数对子类(或友元)和类的外部用户都不可用,因为它不存在,无论其访问控制如何。

我看到的唯一区别是不同的作用域会以何种方式看到复制构造函数不存在 - 无论它只是不存在(据该作用域所知)还是被显式删除。

现在,为类提供最好的正式界面可能是有益的 - 也就是说,如果每个人都应该知道该类是不可复制的,则应将其公开删除。编译器错误消息也可能提供更多信息。但除此之外 - 类行为是否有任何实际可观察到的差异?也就是说,可以对一个类执行某些操作,该类的已删除构造函数具有访问权限 X,如果该构造函数具有访问权限 Y,他就无法执行该类?

由于在这种情况下,是重载分辨率使程序格式不正确,而不是访问说明符(稍后会检查),因此结果没有差异。编译器总是会抱怨选择了已删除的函数。

但是由于 C++11 之前的成语是"声明但不定义私人副本 c'tor 以禁用复制">,我认为它与相同的成语一致,因此是有利的。你正在使用"旧俚语"和一些新语言来描述同样的事情,除了更好。

相关文章: