分类: LINUX
2017-05-18 19:02:35
点击(此处)折叠或打开
在应用编程的时候很容易犯错的一个错误就是资源的释放,如delete pCst很可能在delete之前该函数就被返回了,导致pCst不被正常释放。
不管什么原因,依赖编程者去释放资源总是存在不可靠性。所以,这里引进以对象来管理其使用的资源,即对象被销毁的时候自动释放其使用的资源。
第一种是auto_ptr(类指针对象),其析构函数自动对其所指对象调用delete。
点击(此处)折叠或打开
以上代码示例展现了2个关键想法:
1. 获得资源后立刻放入管理对象内;
2. 管理对象应用析构函数确保资源被释放。
为避免一个对象被多个智能指针auto_ptr管理从而导致被重复释放的可能,auto_ptr有一个特性,在通过copy构造或者copy assignment被复制后,其本体会变成NULL,而复制所得的指针将获得该资源的唯一所有权。
点击(此处)折叠或打开
auto_ptr上的复制行为不正常。为了实现正常的复制行为,提出了另一种替代方案---引用计数型智慧指针RCSP。例如TR1的tr1::shared_ptr。
类似文件系统中文件inode的管理,inode描述了一个文件,只有当inode的引用计数为0时,对应的文件才被删除。
点击(此处)折叠或打开
shared_ptr能正常处理copy问题,弥补了auto_ptr的问题。
但是有一点需要注意,不管是auto_ptr还是shared_ptr,其析构函数调用的是delete而不是delete []。
也就是说,他们同样不能安全地处理数组对象的资源释放。
点击(此处)折叠或打开