У меня есть следующий пример программы
#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: Не передавайте указатель, который может быть недействительным для функции. Параметр 0 '@instance' в вызове 'MyClass :: displayValue' может быть недействительным (продолжительность.3).
Может кто-нибудь объяснить мне, как именно я должен использовать std::unique_ptr<MyClass>
здесь, чтобы избежать предупреждения?
Кроме того, я получаю следующее предупреждение при инициализации unique_ptr:
main. cpp (14): предупреждение C26414: Переместить, скопировать , переназначить или сбросить локальный интеллектуальный указатель 'instance' (r.5).
Я могу облегчить эту проблему, обернув использование std::make_unique
в std::move
, но я не думаю, что это должно быть необходимо.
Как правильно написать этот код и избежать предупреждений, которые я получаю от анализатора кода?