我有一个很大的班级,里面有很多 STL 容器。
编译器会自动创建一个移动构造函数,将这些容器移动到目标,还是我必须自己制作?
问问题
11514 次
2 回答
59
类 X 的移动构造函数在何时被隐式声明为默认值
- X 没有用户声明的复制构造函数,
- X 没有用户声明的复制赋值运算符,
- X 没有用户声明的移动赋值运算符,
- X 没有用户声明的析构函数,并且
- 移动构造函数不会被隐式定义为已删除。
因此,例如,如果您的类有一个没有移动构造函数的类类型数据成员,那么即使它没有声明任何复制/移动构造函数,您的类也不会获得移动构造函数,因为隐式声明的移动构造函数会被定义为删除(因为该数据成员)。
于 2011-11-27T12:19:09.093 回答
3
默认移动构造函数通常与默认复制构造函数相关联。当你得到另一个时,你得到一个。但是,如果您编写复制构造函数/赋值运算符,则不会编写默认的复制和移动构造函数/赋值运算符。如果你写其中任何一组,你必须把它们都写下来。
于 2011-11-27T04:18:16.390 回答