首页 > 编程语言 >《Effective C++:改善程序与设计的55个具体做法》阅读笔记

《Effective C++:改善程序与设计的55个具体做法》阅读笔记

时间:2022-10-02 15:56:47浏览次数:54  
标签:Effective 55 auto C++ ptr 对象 shared 资源管理 资源

Item 13: 使用对象管理资源

资源管理对象:资源管理对象管理着其他对象的资源,当资源管理对象的析构函数被调用时,所管理的资源会被自动释放。资源管理对象就是在其析构函数中写了释放所管理对象的资源的语句。

Resource Acquisition Is Initialization (RAII):获取一个资源并在同一个语句中初始化资源管理对象(获得资源后应该立即移交给资源管理对象),这样就可以使用资源管理对象对资源进行管理。如std::auto_ptr pInv(createInvestment());,其中createInvestment()返回资源,并利用此资源初始化pInvpInv管理的就是createInvestment()所返回的对象的资源。

书中介绍了两种资源管理类,分别为std::auto_ptrtr1::shared_ptr
std::auto_ptr:被拷贝的auto_ptr对象会被置空。
tr1::shared_ptr:拷贝操作发生时,对象的引用计数加一。

auto_ptrtr1::shared_ptr不能用于动态分配的数组,因为它们背后使用的是delete,而不是delete []。
动态数组可以使用boost::scoped_arrayboost::shared_array

标签:Effective,55,auto,C++,ptr,对象,shared,资源管理,资源
From: https://www.cnblogs.com/codingbigdog/p/16748881.html

相关文章

  • C++——史蒂夫
    #include<iostream>#include<string>#include<windows.h>#include"minecraft.h"usingnamespacestd;TxMinecraftmc;intmain(intargc,char**argv){//连接我的世......
  • C/C++ 实现INI配置文件读写 [转载]
    INI文件是一种标准的Windows平台配置文件,通常这种配置文件用于保存系统软件的一些基本配置参数,如下代码是本人从网络上收集到的一段纯C++编写的配置解析......
  • C++实现双向RRT算法
    C++实现双向RRT算法背景介绍RRT(Rapidly-exploringRandomTrees)是StevenM.LaValle和JamesJ.KuffnerJr.提出的一种通过所及构建空间搜索树实现对非凸高维空间快速搜......
  • [ 数据结构 - C++]红黑树RBTree
    在上篇文章我们了解了第一种平衡二叉搜索树AVL树,我们知道AVL树是通过平衡因子来控制左右子树高度差,从而将二叉树变成一颗平衡二叉搜索树。本篇文章我们将要了解另外一种平衡......
  • c++的四种类型转换
    const_cast<> 表示消除const属性static_cast<> 编译时就检查、没鸟用reinterpret_cast<>表示两个没关系的类型转换dynamic_cast<>运行时转换、父转子 总结:没......
  • c++ string类 和c 风格string 的问题梳理
    1.互相转换:c++---> c:           cppstr.c_str()c   ---> c++: stringcppstr=string(cstr)打印时、co......
  • c++ const 总结
    1.基本的定义一个常量 constinta=xxx2.constchar*p,char*constp区别前者表示指向的内容不能用p修改后者表示p不能指向别处const......
  • UE C++教程之接口 UINTERFACE
    我是谁不重要,重要的是,我能做什么。近期笔者在进行UE的开发时,实现多武器的换弹与开火需要用到接口。而笔者以前是做Unity开发的,遂没有使用过UEC++的UINTERFACE,而这个接......
  • C++实现二分法求零点
    ​ 目录 前言题目:一、零点是什么?二、二分法求零点1.二分法2.完整代码总结 前言首先,我们要清楚我们是干嘛的;其次,知道原理;最后,才能明白自己要怎么办。明确:......
  • c++ vector
    创建vectorvector的几个别名:向量、动态数组头文件:#include<vector>记得加上std命名空间,不然会报错usingnamespacestd;创建vectorvector<int>A;//一维动态数组......