C++11中的五法则是什么?


五法则应用于C++的资源管理。资源管理使客户端无需担心被管理对象的生存期,从而潜在地消除C++代码中的内存泄漏和其他问题。但是这种管理是有代价的。五大法则指出,如果你必须编写以下函数之一,那么你必须为所有这些函数制定策略。如果我们有一个对象Foo,那么我们可以有一个FooManager来处理资源Foo。在实现FooManager时,你可能需要实现以下所有函数:

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

  • 赋值运算符 - 如果你不提供一个,编译器将创建一个默认的赋值运算符。默认的赋值操作是一个逐成员复制函数,它执行浅拷贝而不是深拷贝。这可能会导致内存泄漏、错误赋值等问题。

  • 复制构造函数 - 编译器提供的复制构造函数会逐成员复制FooManager的所有属性。这会带来与赋值运算符相同的问题。

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

  • 移动赋值运算符 - 一次只拥有一个资源非常有用。此资源的所有权可以从一个管理器转移到另一个管理器。在这种情况下,你可以提供一个移动赋值运算符。

这是一个学习五法则的好资源 - https://www.feabhas.com/sites/default/files/2016-06/Rule%20of%20the%20Big%20Five.pdf.

更新于:2020年6月24日

浏览量:596

启动你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.