合成的复制控件成员总是公共的

Are synthesized copy control members always public?

本文关键字:控件 复制 成员      更新时间:2023-10-16

当我们没有定义任何构造函数时,编译器会为我们合成一个默认构造函数。如果我们自己不定义复制构造函数、复制赋值函数和析构函数,编译器总是会合成它们。我想知道合成的复制控件成员是否总是公共的?或者是否有任何方法来控制这些合成成员的访问?

Edit:澄清一下,如果我根本不声明这些成员,我想知道这些成员的默认访问是什么。

是的,您可以获得合成的特殊功能,但使用不同的访问控制:

class Foo {
  private:
     Foo() = default;
};

因为它仍然是声明为私有的,所以它不是公共的,但是你不需要定义

它们应该是公共的

http://en.cppreference.com/w/cpp/language/copy_constructor

如果没有为类类型(结构、类或联合)提供用户定义的复制构造函数,编译器将始终将复制构造函数声明为其类的非显式内联公共成员

阻止这些成员函数可用的旧方法是自己将它们声明为private。现在您可以将成员函数设置为delete:

Example& operator = (const Example& rhs) = delete;