cppcheck 是不是知道移动语义?
Posted
技术标签:
【中文标题】cppcheck 是不是知道移动语义?【英文标题】: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 还没有意识到这一点?
【问题讨论】:
【参考方案1】:我是一名 Cppcheck 开发人员。在我看来,这是一个误报,Cppcheck 不应该发出警告。可能我们不应该警告任何函数中的 std::shared_pointer 参数。我创建了这张票:http://trac.cppcheck.net/ticket/8400
【讨论】:
我一直在寻找这个答案。我将在我当前的代码中禁止这个检查。 这应该是所有按值传递并立即移出的对象的情况。以上是关于cppcheck 是不是知道移动语义?的主要内容,如果未能解决你的问题,请参考以下文章