cppcheck是否意识到移动语义?

时间:2018-02-06 01:26:45

标签: move-semantics cppcheck

我正在写一个或多或少看起来像这样的课程

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

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

Set up Dex发出警告

  

(表演)功能参数&#39; b&#39;应该通过引用传递。

我的印象是,在这种情况下,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知道的东西吗?

1 个答案:

答案 0 :(得分:2)

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