C++编程规范之13:确保资源为对象所拥有。使用显示的RAII和智能指针

摘要:

    利器在手,不要再徒手为之:C++的“资源获取及初始化”(ResourceAcquisition Is Initialization,RAII)惯用法是正确处理资源的利器。RAII使编译器能够提供强大且自动的保证,这在其他语言中可是需要脆弱的手工编写的惯用法才能实现的。分配原始资源的时候,应该立即将其传递给属主对象。永远不要在一条语句中分配一个以上的资源。

    这就要求我们的对象、变量在他的生命周期结束的时候要进行回收,否则会造成内存泄漏。C++语言强制施行的构造函数和析构函数对称反映了资源获取和释放的本质的对称性。这使具有资源获取的构造函数和具有资源释放的析构函数的基于栈的对象成为了自动化资源管理和清除的极佳工具。

    要确保所有的资源都是为对象所有。最好用智能指针而不是原始指针来保存动态分配的资源,同样,应该在自己的语句中执行显示的资源分配,而且每次都应该马上将分配的资源赋予管理对象,否则,就可能泄漏资源,因为函数参数的计算顺序是未定义的。对于这个问题的解决方法是:遵循建议,绝对不要在一条语句中分配一个以上的资源,应该在自己的代码语句中执行显示的资源分配,而且每次都应该马上将分配的资源赋予管理对象。

时间: 2024-09-23 06:32:04

C++编程规范之13:确保资源为对象所拥有。使用显示的RAII和智能指针的相关文章

《C++编程规范:101条规则、准则与最佳实践》——2.9 确保资源为对象所拥有。使用显式的RAII和智能指针

2.9 确保资源为对象所拥有.使用显式的RAII和智能指针 摘要利器在手,不要再徒手为之:C++的"资源获取即初始化"(Resource Acquisition Is Initialization,RAII)惯用法是正确处理资源的利器.RAII使编译器能够提供强大且自动的保证,这在其他语言中可是需要脆弱的手工编写的惯用法才能实现的.分配原始资源的时候,应该立即将其传递给属主对象.永远不要在一条语句中分配一个以上的资源. 讨论C++语言所强制施行的构造函数/析构函数对称反映了资源获取/释

《C++编程规范:101条规则、准则与最佳实践》——导读

前言 C++编程规范:101条规则.准则与最佳实践尽早进入正轨:以同样的方式实施同样的过程.不断积累惯用法.将其标准化.如此,你与莎士比亚之间的唯一区别将只是掌握惯用法的多少,而非词汇的多少. --Alan Perlis[1]} 标准最大的优点在于,它提供了如此多样的选择. --出处尚无定论 我们之所以编写本书,作为各开发团队编程规范的基础,有下面两个主要原因. 编程规范应该反映业界最久经考验的经验.它应该包含凝聚了经验和对语言的深刻理解的公认的惯用法.具体而言,编程规范应该牢固地建立在大量丰富

【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert

引用包装器  std::ref(变量) #include<iostream> template<class T> void com(T arg)//模板函数,引用无效,引用包装器 { std::cout <<"com ="<< &arg << "\n"; arg++; } void main() { int count = 10; int & rcount = count; com(coun

JAVA 编程规范

编程|规范 1. 应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JAVABEAN,EJB)均应遵守这个规范.同时,也可作为其它项目的参考. 2. 设计类和方法 2.1 创建具有很强内聚力的类 方法的重要性往往比类的重要性更容易理解,方法是指执行一个统一函数的一段代码.类常被错误的视为是一个仅仅用于存放方法的容器.有些开发人员甚至把这种思路作了进一步的发挥,将他们的所有方法放入单个类之中. 之所以不能正确的认识类的功能,原因之一是类的实现实际上

C#编程规范和惯例

编程|规范 谁都会写代码!几个月的编程经验可以让你写出"可运行应用程序".让它可运行容易,但是以最有效率的方式编码就需要下更多的功夫! 要知道,大多数程序员在写"可运行代码,"而不是"高效代码".我们在这个指南课程前面提到,你想成为你们公司"最尊贵的专业人员"吗?写"高效代码"是一项艺术,你必须学习和实践它. 命名惯例和规范 注记 : Pascal 大小写形式-所有单词第一个字母大写,其他字母小写.Came

IDesign C#编程规范(一)

编程|规范 IDesign发布了C#编程规范,小鸡射手从Only4Gurus下载浏览后决心抽时间翻译一下,以更好地学习. 目录内容如下: 1 命名规则和风格 Naming Conventions and Style 2 编码惯例 Coding Practices 3 项目设置和结构 Project Settings and Structure 4 Framework特别指导 Framework Specific Guidelines 4.1 数据访问 Data Access 4.2 ASP.NE

实现高效Java编程规范的十一条基础规则

编程|规范 本文介绍的Java规则的说明分为5个级别,级别1是最基本也是最重要的级别,在今后将陆续写出其他的规则.遵守了这些规则可以提高程序的效率.使代码有更好的可读性等. (1) 避免使用NEW关键字来创建String对象 把一个String常量copy到String 对象中通常是多余.浪费时间的. Public class test{ Public void method(){ System.out.print (str); } private String str = new String

C# 编程规范

编程|规范 C# 编码规则 一.命名 1.用pascal规则来命名方法和类型. public class TextBox { public void DataBind() { } } 2.用camel规则来命名局部变量和方法的参数. string userName; public AddUser(string userId, byte[] password); 3.所有的成员变量前加前缀 _ public class Database { private string _connectionSt

Visual Basic编程规范

visual|编程|规范 Visual Basic编程规范 1.      Visual Basic IDE(集成开发环境)设置        必须打开设置选项的"要求变量声明","对齐控件到网格","自动缩进"开关.        Tab的宽度统一为4个空格,网格单位一律设为:width 60 height 60. 2.     命名约定        (注意:在任何时候,不能使用中文及全角字符,只允许使用英文字母.下划线和数字) 2.1