码迷,mamicode.com
首页 > 其他好文 > 详细

3. 资源管理(条款:13-17)

时间:2014-09-10 22:17:31      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   os   strong   2014   div   sp   log   

条款13: 以对象管理资源。

a. 资源泄露:

#include <iostream>
using namespace std;
struct INT 
{
	int v;
	INT(int x) : v(x) { cout << "INT constructor called." << endl; }
	~INT() { cout << "INT deconstructor called." << endl; }
};
int main() 
{
	INT *tmp = new INT(6);
	cout << (*tmp).v << endl;
	cout << tmp->v << endl;
}

 bubuko.com,布布扣(没有调用析构函数,资源在堆中没有释放)

b. 用对象管理资源:

template<typename T> class Resource_ptr /* 加入管理类型 Resource_ptr */
{
public:
	Resource_ptr (T *p = NULL) : r_ptr(p) { cout << "Resource_ptr constructor called;" << endl; }
	~Resource_ptr () 
	{ 
		cout << "Resource_ptr deconstructor called; " << endl;
		if(r_ptr) delete r_ptr; 
	}

	const T& operator* () const { return *r_ptr; }
	T& operator* () { return *r_ptr; }

	const T* operator-> () const { return r_ptr; }
	T* operator-> () { return r_ptr; }

	/*T* get() { return r_ptr; }*/
private:
	T *r_ptr;
};

typedef Resource_ptr<INT> R_ptr;

int main() 
{
	/*INT *tmp = new INT(6);*/
	R_ptr tmp = R_ptr(new INT(6));
	cout << (*tmp).v << endl;
	cout << tmp->v << endl;
}

 bubuko.com,布布扣(利用对象,通过 delete 调用析构函数释放资源)

 

3. 资源管理(条款:13-17)

标签:blog   http   io   os   strong   2014   div   sp   log   

原文地址:http://www.cnblogs.com/liyangguang1988/p/3965161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!