“入门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,这些操作也将被合成。
答案 0 :(得分:3)
即使方法可以自动生成,也要明确声明它们已启用
private
,protected
,public
)=delete
=delete
)成员,并在实现中使用=default
implemented (如果该类具有不完整类型的成员,必须将其复制或删除)。对于使用const std::unique_ptr<impl>
实现PIMPL模式的析构函数,这是很常见的。