C ++中的三个规则
使用C++时,三个规则是经验法则。这是一种好的做法,它规定:如果您的班级需要以下任何一项
复制构造函数
赋值运算符
或破坏者
明确定义,则可能需要全部三个。
为什么是这样?这是因为,如果您的课程要求上述任何一项,则它正在管理动态分配的资源,并且可能需要其他资源才能成功实现这一目标。例如,如果您需要赋值运算符,则将创建当前正在通过引用复制的对象的副本,从而分配资源。您将需要使用复制构造函数进行复制,并需要使用析构函数来释放这些资源。
1.复制构造函数-编译器提供的复制构造函数对所有FooManager属性进行成员复制。这带来了与赋值运算符相同的问题。
2.赋值运算符-如果不提供,则编译器将创建默认赋值运算符。默认分配操作是成员级复制功能,并且执行浅表复制而不是深表复制。这可能会导致内存泄漏,分配错误等问题。
3.析构函数-该管理器超出范围时,应释放其正在管理的所有资源。