【发布时间】:2018-02-26 23:04:43
【问题描述】:
我在我的代码中使用了一些供应商库。一些代码如下所示。我看到它在类之间使用循环依赖。我无法理解将复制构造函数和赋值设为私有的原因是什么。 静态代码分析工具之一将违规抛出为“避免使用'new'来分配实例但不定义复制构造函数的类”。
class Parent;
class Child{
public:
Child(Parent& parent):mrParent(parent);
private:
Parent& mrParent;
};
class Parent{
public:
Parent();
~Parent();
//other declarations
Child* child;
private:
//copy and assignment are not allowed. Explicitly declaring private
Parent(const Parent&)
Parent& operator=(const Parent&);
};
【问题讨论】:
-
原因在评论中:
//copy and assignment are not allowed. Explicitly declaring private -
另外,不要在规则检查工具中检查您无法更改的供应商库。
-
我认为这个静态代码分析工具会发出错误的诊断信息。如果类具有默认的复制构造函数和/或赋值,则报告的问题将是相关的。基本上,看起来该工具没有识别出这些构造函数不能使用,因此不会出现问题。除非明确要求类实例是可复制的,否则复制构造函数和赋值应该是私有的/删除的。
-
知道 OP 使用的是哪种静态分析工具会很有趣。