在C++ 11中编写Copy/Move/operator = trio的"正确"方法是什么?

mos*_*ald 9 c++ c++11

此时,编写复制构造函数和赋值运算符对是明确定义的; 快速搜索将引导您充分了解如何正确编码这些.

既然移动构造函数已进入组合,是否有一种新的"最佳"方式?

Xeo*_*Xeo 12

优选地,它们只是= default;,因为成员类型应该是资源管理类型,隐藏移动细节,例如std::unique_ptr.只有那些"低级"类型的实现者才应该为处理它而烦恼.

请记住,如果您持有外部(对象)资源,则只需要使用移动语义.对于"扁平"类型,它完全没用.

  • @NicolBolas感谢您的信息.伤心. (2认同)

CB *_*ley 5

最好的方法是让编译器全部生成它们.它也是C++ 03中最好的方法,如果你设法做到这一点,当你迁移到C++ 11时,你的C++ 03类会自动变为"移动启用".

大多数资源管理问题都可以通过编写单资源管理类的非复制构造函数和析构函数来解决,然后只使用这些std::unique_ptr构建复合类,再加上智能指针(例如)和容器类来构建更丰富的对象.