[Visual Studio Community 2019中的C ++代码分析会产生警告C26486和C26414

问题描述 投票:1回答:1

我有以下示例程序

#include <iostream>

class MyClass
{
private:
    int value;
public:
    MyClass(int v) noexcept : value(v) {}
    void displayValue() { std::cout << "The value is " << value; }
};

int main()
{
    auto instance{ std::make_unique<MyClass>(5) };
    instance->displayValue();
}

当我运行代码分析时,收到以下警告:

main.cpp(15):警告C26486:请勿将可能无效的指针传递给函数。调用'MyClass :: displayValue'时参数0'@instance'可能无效(lifetime.3)。

谁能确切地向我解释我应该如何使用std::unique_ptr<MyClass>来避免警告?

此外,在unique_ptr的初始化中,我收到以下警告:

main.cpp(14):警告C26414:移动,复制,重新分配或重置本地智能指针“实例”(r.5)。

我可以通过将std::make_unique的用法包装在std::move中来缓解此问题,但我认为这不是必须的。

编写此代码并避免从代码分析器收到警告的正确方法是什么?

c++ visual-studio visual-studio-2019 c++-standard-library
1个回答
0
投票

响应警告C26414

[我通过GitHub从Microsoft的Colin Robertson收到了回复,并提供了以下说明:

此案例位于“备注”部分的最后一个要点之下。除非您正在做需要对unique_ptr保护的操作,否则将其声明为MyClass instance {5};避免了不必要的开销。请记住,警告只是对一般规则的提醒。如果您有特定声明的充分理由,请有足够的信心忽略它。

他的回复也可以在这里找到以供参考:

https://github.com/MicrosoftDocs/visualstudio-docs/issues/4711

因此,基本上,在此提醒我们,如果不需要,不要使用堆分配。

响应警告C26486

未回答。我已经通过GitHub请求了更多信息,正在等待回复。

更新2020年1月29日-仍未答复。已提交问题到Microsoft开发者社区

[Update 2/3/2020-从Visual Studio社区(我认为是机器人?)收到答复,将问题的状态更新为“已分类”。我想这意味着他们正在优先考虑这个问题,也许吗?如果感兴趣,可以关注问题here

© www.soinside.com 2019 - 2024. All rights reserved.