C++ 如何解决“静态代码分析错误”;明确定义缺少的复制构造函数、移动构造函数..”;在C++;

C++ 如何解决“静态代码分析错误”;明确定义缺少的复制构造函数、移动构造函数..”;在C++;,c++,sonarqube,C++,Sonarqube,我得到以下可能是静态代码分析错误: 显式定义缺少的复制构造函数、移动构造函数、复制赋值运算符和移动赋值运算符,以便它们不会隐式提供。 我在头文件中的以下析构函数声明中获得上述消息: ~CCPSDataManager(); 在我的.cpp文件中,还有这个析构函数~CCPSDataManager()的定义 这里我需要遵循5的规则,提供析构函数、复制构造函数和复制赋值操作符、移动构造函数和移动赋值操作符吗?还是有其他办法 如果我定义了复制构造函数、复制赋值操作符、移动构造函数和移动赋值操作符,那么我

我得到以下可能是静态代码分析错误:

显式定义缺少的复制构造函数、移动构造函数、复制赋值运算符和移动赋值运算符,以便它们不会隐式提供。

我在头文件中的以下析构函数声明中获得上述消息:

~CCPSDataManager();
在我的.cpp文件中,还有这个析构函数~CCPSDataManager()的定义

这里我需要遵循5的规则,提供析构函数、复制构造函数和复制赋值操作符、移动构造函数和移动赋值操作符吗?还是有其他办法

如果我定义了复制构造函数、复制赋值操作符、移动构造函数和移动赋值操作符,那么我们编写了很多行代码而没有使用它们。这是正确的方法吗

请就如何进行提出建议并给我一些见解

这里我需要遵循5的规则,提供析构函数、复制构造函数和复制赋值操作符、移动构造函数和移动赋值操作符吗

取决于你在析构函数中做了什么

在大多数情况下,如果需要析构函数,则需要遵循规则5,因为在大多数情况下,隐式生成的析构函数会做错误的事情。不一定,但在大多数情况下。您使用的分析仪建议遵循5的规则,因为假设它可能是必要的

还是有其他办法

如果不需要自定义析构函数,则遵循0规则:不要定义自定义析构函数

如果我定义了复制构造函数、复制赋值操作符、移动构造函数和移动赋值操作符,那么我们编写了很多行代码而没有使用它们

如果您不使用它们,那么最简单的解决方案就是定义删除它们

这里我需要遵循5的规则,提供析构函数、复制构造函数和复制赋值操作符、移动构造函数和移动赋值操作符吗

取决于你在析构函数中做了什么

在大多数情况下,如果需要析构函数,则需要遵循规则5,因为在大多数情况下,隐式生成的析构函数会做错误的事情。不一定,但在大多数情况下。您使用的分析仪建议遵循5的规则,因为假设它可能是必要的

还是有其他办法

如果不需要自定义析构函数,则遵循0规则:不要定义自定义析构函数

如果我定义了复制构造函数、复制赋值操作符、移动构造函数和移动赋值操作符,那么我们编写了很多行代码而没有使用它们


如果您不使用它们,那么最简单的解决方案就是将它们定义为已删除。

该类是否有可以由RAII构造替换的成员?它是否进行任何形式的动态分配或资源获取?析构函数在做什么?您真的需要析构函数吗?我们使用智能指针声明了一个资源,如:静态共享\u ptr m\u ActiveInstance;然后在析构函数中,我们将其设置为“NULL”CCPSDataManager::~CCPSDataManager(){m_-ActiveInstance=NULL;}我想我们可以删除m_-ActiveInstance=NULL行;由于资源的类型为shared_ptr,因此从析构函数中删除。我们还可以删除析构函数的定义、声明,并且可以遵循零规则。请提出建议。您不需要显式地将智能指针设置为空指针,一旦智能指针对象超出范围,它将做正确的事情。这意味着您可以遵循零规则,并删除析构函数。该类是否有可以由RAII构造替换的成员?它是否进行任何形式的动态分配或资源获取?析构函数在做什么?您真的需要析构函数吗?我们使用智能指针声明了一个资源,如:静态共享\u ptr m\u ActiveInstance;然后在析构函数中,我们将其设置为“NULL”CCPSDataManager::~CCPSDataManager(){m_-ActiveInstance=NULL;}我想我们可以删除m_-ActiveInstance=NULL行;由于资源的类型为shared_ptr,因此从析构函数中删除。我们还可以删除析构函数的定义、声明,并且可以遵循零规则。请提出建议。您不需要显式地将智能指针设置为空指针,一旦智能指针对象超出范围,它将做正确的事情。这意味着您可以遵循零规则,并删除析构函数。感谢@eerorika的解释:我从您的解释中了解到,Sonarqube给出了错误,因为编译器正在隐式查找5规则场景中剩余四个函数中至少一个的定义,因此,如果我不确定编译器试图隐式调用哪个函数,那么我是否可以将其余四个操作都设置为=delete,并且在编译后,根据错误/警告,我是否可以定义所需的函数?谢谢@eerorika的解释:从您的解释中,我的理解是,Sonarqube给出错误是因为编译器正在隐式查找规则5场景中剩余四个函数中的至少一个函数的定义,因此如果我不确定编译器隐式尝试调用哪个函数,那么我是否可以将所有剩余四个操作设为=delete,一旦我编译,根据错误/警告,我可以定义所需的功能吗?