C ++中的三个规则

使用C ++时,三个规则是经验法则。这是一种好的做法,它规定:如果您的班级需要以下任何一项

  • 复制构造函数

  • 赋值运算符

  • 或破坏者

明确定义,则可能需要全部三个。

为什么是这样?这是因为,如果您的课程要求上述任何一项,则它正在管理动态分配的资源,并且可能需要其他资源才能成功实现这一目标。例如,如果您需要赋值运算符,则将创建当前正在通过引用复制的对象的副本,从而分配资源。您将需要使用复制构造函数进行复制,并需要使用析构函数来释放这些资源。

1.复制构造函数-编译器提供的复制构造函数对所有Foo Manager属性进行成员复制。这带来了与赋值运算符相同的问题。

2.赋值运算符-如果不提供,则编译器将创建默认赋值运算符。默认分配操作是成员级复制功能,并且执行浅表复制而不是深表复制。这可能会导致内存泄漏,分配错误等问题。

3.析构函数-该管理器超出范围时,应释放其正在管理的所有资源。