访问控制是否对删除的构造函数有影响?

Dan*_*nra 4 c++ constructor c++11

明确删除的构造函数之间的行为是否存在差异public,protected或者private

例如,不可复制的类将具有已删除的复制构造函数(以及已删除的复制分配).构造函数既不能用于子类(或朋友),也不能用于类的外部用户,因为它不存在,无论其访问控制如何.

我看到的唯一区别是不同的范围将以何种方式看到复制构造函数不存在 - 是否只是存在(就该范围知道而言)或者是显式删除的.

现在,为类提供最好的正式接口可能是有益的 - 也就是说,如果每个人都应该知道该类是不可复制的,那么它应该被公开删除.编译器错误消息也可能提供更多信息.但除此之外 - 课堂行为会有任何实际可观察​​到的差异吗?也就是说,一个人可以做一个具有删除的构造函数的类的类,如果该构造函数有访问Y,那么他就无法访问X?

Sto*_*ica 7

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

但是,由于C++ 11之前的成语是"声明但没有定义私有拷贝c'tor来禁用复制",我会认为它与同样的习语一起,因此是有利的.你正在使用一些新语言的"旧俚语"来描述同样的事情,除了更好.

  • 我实际上认为在大多数情况下,在大多数情况下制作删除的副本ctor`public`在语义上更有意义 - 当你希望公开声明类的*接口*是不可复制的时候.无论如何,我很好奇行为是否存在任何差异(对于一般的构造函数,而不仅仅是我用作示例的副本). (2认同)