这是我获得大部分信息的地方:http://en.cppreference.com/w/cpp/language/move_constructor
显然,这些是隐式生成的 move 构造函数工作的条件:
- 没有用户声明的复制构造函数
- 没有用户声明的复制赋值运算符
- 没有用户声明的 move 赋值运算符
- 没有用户声明的析构函数
- 隐式声明的 move 构造函数未定义为已删除
- 如果存在用户声明的 move 构造函数,仍然可以使用关键字
default
强制生成隐式声明的 move 构造函数
我的问题是:
- 依赖隐式自动 move 构造函数安全吗?
- 如何检查它是否确实有效而不是默认的复制构造函数?
- 最后,也是最重要的一点,这是一个好主意吗?为什么?还是定义我自己的总是更好?
我更倾向于遵循三规则并手动创建析构函数、复制和 move 构造函数以及复制和 move 赋值运算符,但我只是对此感到好奇>隐式一个。
最佳答案
以下是您问题的答案:
- “安全”是什么意思?当规则适用时,即子对象是可 move 的,并且您没有做任何事情来破坏 move 构造函数的生成,它将被创建并在存在时使用。但请注意,很容易有一个不可 move 的子对象,这会在某种程度上无形地抑制 move 构造函数的创建。
- 要查看您的类是否有 move 构造函数,只需在使用复制和 move 构造函数时临时添加一个空的基本日志记录,并强制 move/复制对象:它将记录相应使用的构造函数。
- 没有任何代码通常比任何代码都好。
关于c++ - 依赖隐式声明的 move 构造函数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18424183/