#cpp #visual_studio
К примеру есть такой простой код
class obj
{
int i;
public:
obj() : i(0) {}
obj(int j) : i(j) {}
obj(const obj& z) : i(z.i) {}
obj operator=(const obj& z)
{
i = z.i;
return (*this);
}
void print()
{
cout << i << endl;
}
~obj(){}
};
int main()
{
obj a(1);
a = obj(2); //C26444 Avoid unnamed objects with custom construction and destruction
(es.84)
a.print();
return 0;
}
в строчке
a = obj(2);
visual studio 2019 кидает предупреждение
Avoid unnamed objects with custom construction and destruction (es.84).
Поискал в гугле, но ничего понятного не нашел, буду признателен любой помощи
Ответы
Ответ 1
В описании сообщения в документации (https://docs.microsoft.com/en-us/visualstudio/code-quality/c26444?view=vs-2019) сказано, что данное предупреждение генерируется в том числе при игнорировании нетривиальных результатов вызовов функций. Именно такое такое игнорирование происходит при вызове вашего оператора присваивания из-за того, что ваш оператор присваивания почему-то возвращает свой результат по значению.Ответ 2
Поменял обьявление obj operator=(const obj& z) на obj& operator=(const obj& z) warning пропал, почему - загадка.
Комментариев нет:
Отправить комментарий