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

我有以下示例程序

#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来缓解此问题,但我认为这不是必须的。

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

newcivil 回答:Visual Studio Community 2019中的C ++代码分析产生警告C26486和C26414

针对警告C26414

我通过GitHub从Microsoft的Colin Robertson收到了回复,内容如下:

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

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

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

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

针对警告C26486

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

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

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

本文链接:https://www.f2er.com/2696124.html

大家都在问