MISSING_MOVE_ASSIGNMENT发现的标准是什么?

时间:2016-10-01 06:17:13

标签: c++ coverity move-assignment-operator

我们开始在Windows上使用Coverity扫描跨平台代码库。在Windows上,我们选择了五个 Missing move assignment operator (MISSING_MOVE_ASSIGNMENT) 结果。在Unix,Linux或OS X上没有这些发现。

我们是一个与C ++ 03兼容的C ++库 - C ++ 17。到目前为止,我们只留下了移动任务,因为Jonathan Wakely建议我们这样做(来自GCC邮件列表上的How to determine when a C++11 move is synthesized?):

  

所以你不应该关心[关于提供行动]。如果搬家可能不安全,那就不会发生。如果移动是安全的,那么可能会发生,但在这些情况下,你可能最好让编译器生成正确的移动而不是干扰。

我想知道Coverity用于该发现的标准。 Coverity如何确定我们有机会改进编译器生成的一个?

(我并不挑战这一发现。我试图更好地理解它,理解为什么扫描服务认为我们可以做得更好,并了解机会所处的位置。并且&em>& #34;更好的工作" 可能只适用于Windows)。

此处one of the findings。其他可在Coverity Scan网站上找到。

   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 };

0 个答案:

没有答案