我想让某些类使用自动生成的构造函数,但不可复制(但仍可移动)。目前,我正在这样做:
class A
{
public:
A() = default;
A(const A&) = delete;
A(A&&) = default;
A& operator=(const A&) = delete;
A& operator=(A&&) = default;
}
我想知道是否真的需要如此明确。如果我这样写的话:
class A
{
A(const A&) = delete;
A& operator=(const A&) = delete;
}
它仍然可以正常工作吗?对于其他情况-不可复制的不可移动类以及带有虚拟析构函数的类,最小的默认值和删除集是什么?
有什么测试代码可以用来快速查看隐式创建了哪些构造函数?
这将不起作用,因为不会自动为您创建默认的构造函数。由于已声明复制构造函数,因此不会创建默认构造函数。它被定义为delete,但是仍然是用户声明的,因此没有隐式默认的默认构造函数。
隐式创建的构造函数的简化规则是:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句