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

时间:2018-04-08 12:49:51

标签: c++ c++11 constructor

明确删除的构造函数是publicprotected还是private之间的行为是否存在差异?

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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