考虑以下类,实现移动构造函数的正确方法是什么:
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中被复制而不是移动。
这是一个移动构造函数的正确实现吗?
class C { std::string string; };
- kennytmstring
,然后移动。第二个更好。另外:不要将变量命名为类型相同的名称。选项B应该移动字符串。 - Mooing Duck