rule-of-three相关内容

理解-Weffc++

考虑以下程序: #include 结构 S {S (){}私人的:无效 *ptr = nullptr;std::string str = "";};int main(){} 当在 GCC 4.7.1 上使用 -Weffc++ 编译时,会吐出: 警告:“结构 S"具有指针数据成员 [-Weffc++]警告:但不会覆盖 'S(const S&)' [-Weffc++]警告:或 ' ..
发布时间:2022-01-23 20:27:06 C/C++开发

在 C++11 中三分法变成五分法?

所以,看完关于右值引用的精彩讲座,我认为每个类都会从这样的“移动构造函数"中受益,templateMyClass(T&& other) edit 当然还有一个“移动赋值运算符",template我的课堂&operator=(T&& other) 正如菲利普在他的回答中指出的那样,如果它有动态分配的成员,或者通常存储指针.就像您应该拥有复制构​​造函数、赋值运算符和析构函数一样,如果前面提到的要点适 ..
发布时间:2021-12-01 14:43:31 C/C++开发

是否有任何静态分析工具可以检查规则 3(或规则 5 C++11)

我目前正在开发一个建立在沙子基础上的代码库. 据称经过测试的库中有许多违反“3 法则"的类.大多数声明了一个非平凡的析构函数,但缺少复制构造函数或赋值运算符. 是否有任何编译器标志 (gcc) 或静态分析工具会在类违反 3 规则时发出警告? 目前我们在 GCC 4.4 版中使用 Coverity. 解决方案 Coverity 有.我们使用 6.5 版.有一个检查器 MIS ..
发布时间:2021-08-30 18:31:02 C/C++开发

C ++ 11中3个默认成员弃用的规则

根据以下广为人知的表,当用户提供一个或多个副本分配,副本构造函数和析构函数中的一个或多个时,不赞成在C ++ 11中自动生成默认副本构造函数和副本分配的编译器.(红色单元格表示已弃用).鉴于"3规则",这是完全合理的.但是,该表显示,在用户提供的副本构造函数/赋值的情况下,不建议使用默认析构函数的生成. 此设计决定的依据是什么? ..
发布时间:2021-04-20 18:44:40 C/C++开发

三法则运动出乎意料的结果

我尝试在业余时间学习C ++基础并按照书中的练习进行学习。首先,当我输入9作为行,输入8作为列时,我得到了malloc释放错误。其次,我的输出为0,看不到输入的内容。我想编写该程序,因为我可以加强三个规则。当然不是功课。此外,我认为这是一个困难的问题和有效的问题。如果问题可以得到解答,将很有帮助。因为我已经在Google上进行搜索,所以找不到关于解决方案的正当做法。另外,您可以检查我的复制构造函数 ..
发布时间:2020-10-27 02:24:49 C/C++开发

C ++接口必须遵守五个规则吗?

定义接口类时声明实例化方法的正确方法是什么? 出于明显的原因,抽象基类必须具有虚拟析构函数。但是,将给出以下编译警告:“'InterfaceClass'定义了非默认析构函数,但未定义副本构造函数,副本赋值运算符,move构造函数或move 赋值运算符”,即“五规则”。 我理解为什么通常应遵循“五规则”,但是它仍然适用于抽象基类或接口吗? / p> 我的意思是: clas ..

如果该类包含用户声明的析构函数,则复制构造函数是什么?

第12.8/7节中的标准说: 如果类定义未明确声明副本 构造函数,一个隐式声明.如果类定义 声明移动构造函数或移动赋值运算符, 隐式声明的副本构造函数定义为删除;否则, 它被定义为默认值(8.4). 如果不赞成使用后一种情况 类具有用户声明的副本分配运算符或用户声明的 析构函数.因此,对于类定义 struct X { X(const X&, int); }; 隐式声明了一个 ..
发布时间:2020-04-27 05:01:03 C/C++开发

C ++中的三元规则

我已阅读“三项规则”,什么是三项规则? 总结如下: 如果您需要显式声明析构函数,复制构造函数或复制赋值 运算符自己,你可能需要显式声明所有这三个。 我的问题是:在C ++应用程序中,我有一个管理资源的类(具有处理删除指针的析构函数)。我知道应用程序使用赋值运算符在所有的地方,但我绝对确定在应用程序中没有使用复制构造函数,即使用类型类c(..);类d(c); 所以在这些情况下,我仍然需 ..
发布时间:2016-10-20 22:05:55 C/C++开发

例外到三个规则?

我已经阅读了很多关于C ++的三维规则。许多人发誓。但是当规则被声明时,它几乎总是包括一个词“通常”,“可能”或“可能”,表示有例外。我没有看到很多讨论这些特殊情况可能是什么 - 三原则规则不成立的情况,或至少在坚持它不提供任何优势。 $ b 我认为在下面描述的情况下,需要一个显式定义的复制构造函数和复制赋值操作符,但默认(隐式生成)析构函数将正常工作。这里是我的情况: 我有两个类,A和B ..

C ++复制构造函数+指针对象

我试图在C ++学习“大三”。我设法做“大三”非常简单的程序..但我不知道如何使用对象指针。以下是我的第一尝试。 我在写这篇文章时有疑问... 问题 这是实现默认构造函数的正确方法吗?我不知道我是否需要它。但是我在另一个线程中发现了有指针的拷贝构造函数,我需要在拷贝构造函数中复制地址之前为该指针分配空间。 如何分配指针变量复制构造函数?我在Copy Constructor中写的 ..
发布时间:2016-10-17 09:18:42 C/C++开发