CWARN.COPY.NOASSIGN

类定义复制构造函数,但未定义赋值运算符

CWARN.COPY.NOASSIGN 查找器可查找定义复制构造函数但未定义赋值运算符的类。

漏洞与风险

C++ 编译器生成的默认赋值构造函数和赋值运算符会对类数据成员执行逐位复制。如果成员被覆盖,内存可能会被不当处置。这种情况可能导致内存泄漏和资源未释放。

缓解与预防

为解决该问题,请始终为包含动态分配数据成员的类提供赋值运算符的显式实现,并始终确保对这些数据成员执行深层复制。

漏洞和修正代码示例

复制
  class A      
  {
  public
      A(const A &other);
  };
  
  class B
  {
  public
     B(const B &other);
     B &operator=(const B &other);
 };
 
 class C
 {
 public
     void f() {}
 };

在此代码示例中,Klocwork 对类 A 进行了标记,因为它定义了复制构造函数,但未定义赋值运算符。相反,类 B 既定义了复制构造函数又定义了赋值运算符,因此没有被标记。