考虑到以下类,实现移动构造函数的正确方法是什么:
class C {
public:
C();
C(C&& c);
private:
std::string string;
}
当然,这个想法是避免复制string
或释放它两次。
让我们假设基本示例只是为了清楚起见,我确实需要一个移动构造函数。
我试过:
C::C(C&& c) {
//move ctor
string = std::move(c.string);
}
和
C::C(C&& c) : string(std::move(c.string)) {
//move ctor
}
两者都可以在 gcc 4.8 上编译并运行良好。似乎选项 A是正确的行为,string
被复制而不是使用选项 B 移动。
这是移动构造函数的正确实现吗?