【发布时间】:2014-11-01 02:16:24
【问题描述】:
最近我看到很少有这样的代码示例,其中 std::move 用于构造函数初始化列表(而不是移动构造函数)。
class A {
public:
A(std::shared_ptr<Res> res) : myRes(std::move(res)) {
// ...
}
private:
std::shared_ptr<Res> myRes;
}
我得到信息,这个结构是出于优化的原因。就我个人而言,我尽可能少地使用 std::move 。我威胁他们作为演员(正如斯科特迈耶斯所说),并且只在调用者代码中(唯一的例外是移动构造函数)。对我来说,这看起来像是某种混淆或微优化,但也许我错了。是真的吗,编译器不会产生更快的代码,没有 std::move?
【问题讨论】:
-
我认为目的是避免引用计数器的原子增量。这也是一个准确表达您的意图的问题,并且是一种相当常见的模式(按值传递,然后移动本地参数)。
-
@user2079303 我不确定它是否是该特定问题的完整副本。主要关注的是在移动构造函数中移动数据成员;这与这个问题中的问题不同。不过,性能部分部分在那里得到了回答。
-
公平点,我撤回了投票,但我会留下链接,因为我认为它与性能方面有关。
标签: c++ c++11 optimization move move-semantics