=复制控件成员的默认值

时间:2018-12-07 11:35:58

标签: c++11

“入门C ++”

为什么这么多的类将= default用于复制构造函数和赋值运算符以及它们的非虚拟析构函数?

怎么样

class A{
public:
    A() = default;
    A(int);
};

不同于

class A{
public:
    A() = default;
    A(int);
    A(const A&) = default;
    A& operator=(const A&) = default;
    ~A() = default;
};

我的理解是,即使没有这些= default,这些操作也将被合成。

1 个答案:

答案 0 :(得分:3)

即使方法可以自动生成,也要明确声明它们已启用

  • 可见性控制(privateprotectedpublic
  • 添加文档注释
  • 表明作者没有忘记为他们标记=delete
  • 确保添加不可复制的成员将尽早导致清晰可理解的失败
  • 禁用移动操作(尽管最好是在相关成员上使用=delete
有时需要在标头中声明

成员,并在实现中使用=default implemented (如果该类具有不完整类型的成员,必须将其复制或删除)。对于使用const std::unique_ptr<impl>实现PIMPL模式的析构函数,这是很常见的。