Item 14: Think carefully about copying behavior in resource-managing classes.
在Item 13:使用对象来管理资源中提出了基于RAII的资源管理对象,auto_ptr和shared_ptr。
智能指针可以有不同的拷贝策略。当你实现这样一个资源管理对象时,需要特别注意。比如一个典型的RAII风格的互斥锁实现:...
分类:
编程语言 时间:
2015-08-27 11:14:40
阅读次数:
205
C++没有提供垃圾回收机制,C++11提供的智能指针能够在一定程度上解决C++内存泄漏的问题。C++11提供了共享智能指针(shared_ptr),独占智能指针(unique_ptr),弱引用指针指针(weak_ptr),使用时需要引用智能指针本质上存储动态分配(堆)对象的指正的模板类,用于对堆对象...
分类:
编程语言 时间:
2015-08-26 15:20:36
阅读次数:
338
Item 13: Use objects to manage resources.
熟悉智能指针的人肯定不会对此觉得陌生。利用C++中对象自动析构的特性,自动地释放资源。 C++编译器并未提供自动的垃圾回收机制,因此释放资源的责任落在了开发者的头上。 我们被要求总是成对地使用new和delete,例如:
Investment *pInv = createInvestment();
...
分类:
编程语言 时间:
2015-08-26 14:05:26
阅读次数:
234
弱引用(指针)指的是这样一个概念:引用不控制对象的生命周期,但是对象本身销毁后,弱引用能得到“通知”。
WeakPtr的实现思路(概念上的):(WeakPtr 1)===> (引用结构 2) (实际的对象 3)
当(实际的对象3)由于调用析构函数销毁自己时,可以清除(引用结构 2)里面的信息,这样(WeakPtr 1)就得到了null,相当于被通知到了
一种可能的实现...
分类:
其他好文 时间:
2015-08-20 16:49:47
阅读次数:
209
C++ 比较烦恼的是内存的管理,new是简单,不够,delete偶尔就会忘记。或者说,出现,多个对象共享多一个内存,一个delete以后,导致其他也不能用的不良情况,所以就跑出了一个智能指针来进行管理。设计需求:1.该智能指针能接受各种类型的指针 -- 使用模板2.智能指针需要知道该对象有多少个人在...
分类:
编程语言 时间:
2015-08-19 20:11:07
阅读次数:
111
我们知道auto_ptr通过复制构造或者通过=赋值后,原来的auto_ptr对象就报废了.所有权转移到新的对象中去了.而通过shared_ptr可以让多个智能指针对象同时拥有某一块内存的访问权.但假如我们不希望多个内存块被多个智能指针对象共享,同时又不会像auto_ptr那样不知不觉的就让原来的au...
分类:
其他好文 时间:
2015-08-17 15:24:40
阅读次数:
123
前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针,顾名思义,有个shared表明共享嘛.所以shared_ptr类型的智能指针可以做为STL容器的元...
分类:
其他好文 时间:
2015-08-17 15:20:34
阅读次数:
114
智能指针实际上是一个类(class),里面封装了一个指针.它的用处是啥呢?指针与内存说到指针自然涉及到内存.我们如果是在堆栈(stack)中分配了内存,用完后由系统去负责释放.如果是自定义类型,就会自动的去调用你的析构函数.但如果是在堆(heap)中分配了内存,也就是用malloc或者new.那只能...
分类:
其他好文 时间:
2015-08-17 15:19:56
阅读次数:
122
之前多多少少已经整理或写过了一些跟指针有关的博文: C++指针和引用 C++智能指针及其简单实现 函数指针和回调函数 指针和数组解析 指针的类型与指针所指向的类型但对指针还是感觉一知半懂,所以再补充些相关知识。指针作为函数参数 先看一个小例子1: 1 #include 2 #inc...
分类:
其他好文 时间:
2015-08-16 13:42:33
阅读次数:
165
C++的auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理,使用std::auto_ptr,要#include 。
实现代码如下:
#include
#include
using namespace std;
//#define _THROW0() throw ()抛出全部异常
template
class auto_ptr
{
public:
/...
分类:
编程语言 时间:
2015-08-16 12:21:41
阅读次数:
145