交换C ++ - 最佳实践

时间:2013-12-15 09:54:27

标签: c++ performance design-patterns

我有一个具有以下结构的类:

class MyClass {
std::string _myField;
constructor
//copy constructor
//assignment operator
}

当我创建对象时,我想交换字符串而不是复制它。不过,这是违反最佳做法的。

因此,有没有其他更好的解决方案来实现这一点(运动操作员)? 即使我使用setXXX并且使用swap也不是最好的决定。

我希望获得最佳表现。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

为获得最佳性能,请在构造函数中按值传递std :: string,并使用移动构造函数初始化成员变量:

MyClass (std::string s) : _myField (std::move(s)) { /* ... */ }

Want Speed? Pass by Value

PS。一般的建议(模式?)似乎总是通过值传递接收参数。

答案 1 :(得分:0)

  

我希望获得最佳表现。

使用swap

时无法做到这一点

swap需要两个操作数 - 显然是成员变量和来自c-tor的参数。也就是说,在调用swap之前,需要初始化您的成员变量。这将调用一些严格不必要的指令。

为了使用字符串参数构造实例,请使用@ chill的方法。 ;)