资源管理 所谓资源就是,一旦用了它,将来必须还给系统. 13.以对象管理资源 为防止资源泄露,请使用RAII对象,他们在构造函数中获得资源并在析构函数中释放资源. 两个常被使用的RAII classes 对象分别是trl::shared_ptr和auto_ptr.前者通常是较佳选择,因为其copy行 ...
分类:
其他好文 时间:
2018-12-22 16:44:37
阅读次数:
228
概述 + 资源就是一旦用了它,以后必须还给系统的东西。C++中最常用的资源就是 动态内存分配 。其它的资源还包括 文件描述符器、互斥锁、图形界面中的字型和笔刷、数据库连接、以及网络socket 。 + 无论是哪一种资源,我们都要确保当自己使用完之后还给系统。 条款13:以对象管理资源 1. 资源并没 ...
分类:
其他好文 时间:
2018-09-11 21:17:23
阅读次数:
126
如果我们使用一个投资行为的程序库: #include "stdafx.h" #include <iostream> #include <memory> using namespace std; class Investment { public: }; class InvestmentFactory ...
分类:
编程语言 时间:
2017-05-27 20:39:31
阅读次数:
210
C++相比Java等含有gc的语言来说,内存管理方面(也包括资源管理)比较令人头疼。一些初级程序员,甚至是一些经验丰富的老程序员,也会经常在资源管理上犯错。这时候就需要一个能够自动管理资源的东西(gc),但是由于C++本身没有提供,那么只有我们自己实现了。 本节我不打算直接按照《Effective ... ...
分类:
其他好文 时间:
2016-12-22 06:46:21
阅读次数:
149
条款13:以对象管理资源 资源,包括但不限于内存、句柄、GDI对象、数据库连接等。 内存要记得释放,句柄要记得closehandle, GDI对象要记得删除,数据库连接要记得关闭,等等等等。 以对象来管理这些资源就是利用 对象的构造和析构 特性,在构造函数中获得资源并在析构函数中释放资源。 两个智能 ...
分类:
其他好文 时间:
2016-09-30 01:45:36
阅读次数:
116
“异常安全”有两个条件: 1、不泄露任何资源 可以通过以对象管理资源的方式(Item13)。 2、不允许数据败坏 异常安全函数提供以下三种保证之一 a、基本承诺 如果异常被抛出,程序内的任何事物都仍然保持在有效状态下,但是何种状态未知。 b、强烈保证 如果异常被抛出,程序状态不改变。 c 、不抛掷( ...
分类:
编程语言 时间:
2016-08-07 12:30:22
阅读次数:
227
“异常安全”有两个条件: 1、不泄露任何资源 可以通过以对象管理资源的方式(Item13)。 2、不允许数据败坏 异常安全函数提供以下三种保证之一 a、基本承诺 如果异常被抛出,程序内的任何事物都仍然保持在有效状态下,但是何种状态未知。 b、强烈保证 如果异常被抛出,程序状态不改变。 c 、不抛掷( ...
分类:
编程语言 时间:
2016-08-07 12:08:01
阅读次数:
152
以对象管理资源的观念常被称为“资源取得时机便是初始化时机”(RAII) auto_ptr被销毁时会自动删除它所指之物,所以一定要注意别让多个auto_ptr同时指向同一对象,否则对象会被删除多次,行为未定义 auto_ptr有一个性质:若通过拷贝构造函数或拷贝构造运算符复制它们,它们会变成NULL, ...
分类:
编程语言 时间:
2016-07-29 21:03:58
阅读次数:
229
1.以对象管理资源 把资源放进对象内,可以依赖C++的析构函数自动调用机制,确保资源被释放 2.在资源管理类中消息copying行为 3.在资源管理类中提供对原始资源的访问 4.成对使用new和delete时要采取相同形式 5.以独立语句将newed对象置入只能指针 如果不这样做,一旦异常被抛出,有 ...
分类:
编程语言 时间:
2016-05-13 11:04:59
阅读次数:
146
资源管理
所谓资源就是,一旦使用了它,将来必须归还给系统!C++最常见的资源就是动态分配内存,如果不归还就会内存泄露。
1. 以对象管理资源
我们通常希望有一个对象来帮助我们解决资源管理的问题(自动调用析构函数),于是此章我们讨论auto_ptr和shared_ptr。
问题产生假设我们希望使用一个工厂方法如:class investment {...}; // 代表一个root clas...
分类:
编程语言 时间:
2016-04-29 17:03:29
阅读次数:
262