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
我正在写一个 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