【问题标题】:Is cppcheck aware of move semantics?cppcheck 是否知道移动语义?
【发布时间】:2018-02-06 01:26:44
【问题描述】:

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

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

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

cppcheck 警告

(性能)函数参数'b'应该通过引用传递。

我的印象是,在这种情况下,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 还没有意识到这一点?

【问题讨论】:

    标签: move-semantics cppcheck


    【解决方案1】:

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

    【讨论】:

    • 我一直在寻找这个答案。我将在我当前的代码中禁止这个检查。
    • 这应该是所有按值传递并立即移出的对象的情况。
    猜你喜欢
    • 2018-08-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2020-11-07
    相关资源
    最近更新 更多