C ++ 11中的五个规则是什么?

在C ++中将5的规则应用于资源管理。资源管理使客户端不必担心托管对象的寿命,从而可以消除内存泄漏和C ++代码中的其他问题。但是这种管理需要付出一定的代价。五巨头规则指出,如果必须编写以下函数之一,则必须对所有这些函数都有一个策略。如果我们有一个对象Foo,那么我们可以有一个FooManager来处理资源Foo。在实现FooManager时,您可能都需要实现以下功能-

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

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

  • 复制构造函数-编译器提供的复制构造函数对所有FooManager属性进行成员复制。这带来了与分配运算符相同的问题。

  • 移动构造函数-复制对象可能会很昂贵,因为它涉及创建,复制然后销毁临时对象。C ++ 11引入了r值引用的概念。可以将r值引用显式绑定到r值。r值是未命名的对象。换句话说,是一个临时对象。可以在构造函数中使用此r值引用来创建对传递给它的r值的引用。

  • 移动分配运算符-一次仅拥有一个资源很有用。该资源的所有权可以从一位经理转移到另一位经理。在这种情况下,您可以提供移动分配运算符。

这是了解五个规则的绝佳资源-https: //www.feabhas.com/sites/default/files/2016-06/Rule%20of%20the%20Big%20Five.pdf。