这应该是一个微不足道的问题,但我无法在stackoverflow上明确找到它。
如果用户没有提供,将隐式定义以下内容。
但是我已经读过某个地方(我现在似乎无法找到),有些情况下编译器不会隐式实现它们。
这些条件是什么?
答案 0 :(得分:50)
The Default Constuctor(例如,X()
)
const
对象,或没有或无法访问默认构造函数的类)X() = delete;
The Copy Constructor(例如,X(const X&)
)
X
,构建函数为X
,X&
或const X&
)X(const X&) = delete;
The Copy Assignment Operator(例如,X& operator=(const X&)
)
X
个operator=
X
,X&
或const X&
)const
对象或没有或无法访问赋值运算符的类)X& operator=(const X&) = delete;
The Destructor(例如,~X()
)
~X() = delete;
The Move Constructor(C ++ 11)(例如,X(X&&)
)。
X
,构造函数采用X&&
)const
,是引用,或者有删除,不可访问或模糊的移动构造函数)X(X&&) = delete;
The Move Assignment Operator(C ++ 11)(例如,X& operator=(X&&)
)。
X
,operator=
正在考虑X&&
)const
,是引用,或者已删除,无法访问或模糊的移动分配运算符)X& operator=(X&&) = delete;