这应该是一个微不足道的问题,但我无法在 stackoverflow 上明确找到它。
如果用户未提供以下内容,则将隐含定义。
- 默认(无参数)构造函数
- 复制构造函数
- 复制赋值运算符
- 析构函数
但是我在某处读过(我现在似乎找不到),在某些情况下编译器不会隐式实现它们。
这些条件是什么?
这应该是一个微不足道的问题,但我无法在 stackoverflow 上明确找到它。
如果用户未提供以下内容,则将隐含定义。
但是我在某处读过(我现在似乎找不到),在某些情况下编译器不会隐式实现它们。
这些条件是什么?
默认构造函数(例如,X())将不会在以下情况下隐式生成:
const对象或没有或不可访问的默认构造函数的类)X() = delete;X(const X&)如果出现以下情况,将不会隐式生成复制构造函数(例如
X构造函数采用的类X,X&或const X&)X(const X&) = delete;X& operator=(const X&)如果出现以下情况,将不会隐式生成复制赋值运算符(例如
X一个operator=服用类X,X&或const X&)const对象或没有或无法访问赋值运算符的类)X& operator=(const X&) = delete;~X()在以下情况下不会隐式生成析构函数(例如
~X() = delete;X(X&&)在以下情况下,将不会隐式生成移动构造函数(C++11)(例如
X,一个构造函数采用X&&)const、是引用,或者具有已删除、不可访问或不明确的移动构造函数)X(X&&) = delete;X& operator=(X&&)在以下情况下,将不会隐式生成移动赋值运算符(C++11)(例如
X,一个operator=taking X&&)const、是引用,或者有一个已删除、不可访问或不明确的移动分配运算符)X& operator=(X&&) = delete;