cppcheck 是否知道移动语义?

Is cppcheck aware of move semantics?

我正在写一个 class 大致是这样的

struct Foo {
    std::shared_ptr<Bar> bar_ptr;

    Foo(std::shared_ptr<Bar> b)
      : bar_ptr(std::move(b)) {}
};

cppcheck警告

(performance) Function parameter 'b' should be passed by reference.

我的印象是在这种情况下 b 应该 而不是 是任何类型的参考。这将允许 Foo 的实例相对于

选择性地完全控制资源(原始共享指针)
auto bar1 = std::make_shared<Bar>(...);

Foo my_foo(bar1); // bar1 remains untouched
Foo your_foo(std::move(bar1)); // takes complete control of the bar1 
                               // resource; bar1 now invalid

我是不是没有正确使用某些东西,或者这不是 cppcheck 知道的东西?

我是 Cppcheck 开发人员。在我看来这是误报,Cppcheck 不应该发出警告。可能我们不应该在任何函数中警告 std::shared_pointer 参数。我创建了这张票:http://trac.cppcheck.net/ticket/8400