Must a deleted constructor be private?

后端 未结 2 1902
无人共我
无人共我 2020-12-14 07:33
class A
{
public:
    A() = default;
    A(const A&) = delete;
};

class A
{
public:
    A() = default;

private:
    A(const A&) = delete;
};
2条回答
  •  执笔经年
    2020-12-14 07:58

    I want to extend Daniel Frey's answer. Instead of making deleted methods always public, I would rather give these methods the access modifier you would (hypothetically) give these methods if they would not be deleted. (I do not like always in case a programmer has an option. If it would indeed be carved in stone to make deleted methods public, it should be enforced by the language itself.)

    Some rules of thumb/guidelines:

    • Copy and move assignment operators will be public in concrete and abstract classes for most cases.
    • Copy and move constructors will be public in concrete classes for most cases.
    • Copy and move constructors will be protected in abstract classes for most cases.
    • Copy and move constructors will be private in concrete final classes that can only be instantiated by friends for most cases.

    In all cases, you make an announcement to the appropriate users of a class instead of all users of a class.

提交回复
热议问题