代码之家  ›  专栏  ›  技术社区  ›  Danra Bathsheba

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

  •  4
  • Danra Bathsheba  · 技术社区  · 6 年前

    显式删除的构造函数是否 public ,则, protected private ?

    例如,一个不可复制的类将具有一个已删除的副本构造函数(和已删除的副本分配)。构造函数对子类(或朋友)或类的外部用户都不可用,因为它不存在,无论其访问控制如何。

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

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

    1 回复  |  直到 6 年前
        1
  •  7
  •   StoryTeller - Unslander Monica    6 年前

    由于在这种情况下是重载解析导致程序格式错误,而不是访问说明符(稍后检查),因此结果没有差别。编译器总是会抱怨选择了已删除的函数。

    但是由于C++11之前的习惯用法是 “声明但不定义专用复制任务以禁用复制” ,我认为它与同一个习语是一致的,因此是有利的。你在用“旧俚语”和一些新的语言来描述同样的事情,只是更好。