Мы начали сканирование кроссплатформенной кодовой базы с помощью Coverity в Windows. На винде мы подобрали пять Missing move assignment operator (MISSING_MOVE_ASSIGNMENT)
Выводы. Выводы отсутствуют в Unix, Linux или OS X.
Мы библиотека C ++, совместимая с C ++ 03 — C ++ 17. На сегодняшний день мы оставили одни только задания на переезд, потому что Джонатан Уэйкли посоветовал нам сделать это (из Как определить, когда ход C ++ 11 синтезируется? в списке рассылки GCC):
Так что вам не нужно заботиться [о предоставлении переезда]. Если перемещение может быть небезопасным, этого не произойдет. Если перемещение будет безопасным, тогда это может произойти, но в этих случаях вам, вероятно, лучше позволить компилятору генерировать правильный ход, а не мешать.
Я хотел бы знать, какие критерии использует Coverity для нахождения. Как Coverity определяет, есть ли у нас возможность улучшить сгенерированный компилятором?
(Я не оспариваю этот вывод. Я пытаюсь лучше понять его, понять, почему Служба сканирования считает, что мы можем сделать лучше, и понять, в чем заключается возможность. И «работа получше» может применяться только к Windows).
Вот один из выводов. Другие доступны на сайте сканирования Coverity.
CID undefined (#1 of 1): Missing move assignment operator (MISSING_MOVE_ASSIGNMENT)
missing_move_assignment: Class CryptoPP::EC2NPoint may benefit from adding a move assignment
operator. See other events which show the copy assignment operator being applied to rvalue(s),
where a move assignment may be faster.
22 struct CRYPTOPP_DLL EC2NPoint
23 {
24 virtual ~EC2NPoint() {}
25
26 EC2NPoint() : identity(true) {}
27 EC2NPoint(const PolynomialMod2 &x, const PolynomialMod2 &y)
28 : identity(false), x(x), y(y) {}
30
31 bool operator==(const EC2NPoint &t) const
31 {return (identity && t.identity) || (!identity && !t.identity && x==t.x && y==t.y);}
32 bool operator< (const EC2NPoint &t) const
33 {return identity ? !t.identity : (!t.identity && (x<t.x || (x==t.x && y<t.y)));}
34
35 bool identity;
36 PolynomialMod2 x, y;
37 };
Задача ещё не решена.
Других решений пока нет …