Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Avoid unnamed objects with custom construction and destruction (es.84)

#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 пропал, почему - загадка.

Комментариев нет:

Отправить комментарий