2014-12-21 29 views
7

我正在浏览一些C++源代码from a library,这些代码与我正在处理的pet-project有关,并且遇到了一些我不明白的东西。在我期望的指针引用,然后分配的地方,图书馆作者使用std::swap()附近函数的末尾写结果:使用std :: swap代替'='赋值运算符

std::swap(*out, result);

我希望看到这样的事情:

*out = result;

注意resultsize_tout一个typedef是一个指针,指向同一类型。

说到“系统编程”,我的背景是C和C#,但在C++中并不多。这种“任务”有什么特别的理由吗?

+1

如果在结果交换之后'result'值不被使用,'std :: move'可能是更好的选择。另请参阅[在C++中究竟是什么R值?](http://stackoverflow.com/q/9406121/608639)。 – jww

+0

@jww,调用'std :: swap'后不使用'result'。 – easuter

回答

9

例如,当值类型更有趣时,比如std::vector<T>,它可能更适合临时构建的对象而不是分配给它:假定临时结果即将消失,避免分配和只是改变指针是有道理的。尽管如此,我没有看到任何理由像std::size_t这样的基本类型做类似的事情。

+0

好的,谢谢你的回复! – easuter

+3

** + 1 **为简洁的答案。或者,在C++ 11中,可以使用移动语义来摆脱分配。我会指出'swap'结构经常出现在copy-and-swap idiom http://stackoverflow.com/q/3279543/3093378中,当你想确保你没有将对象留在undefined由于抛出异常,每当你复制它们。 – vsoftco