RAII:资源获取即初始化(resourse acquisition is initialization)

本段资料来自《C++必知必会》。

 

RAII:资源获取即初始化(resourse acquisition is initialization)

这是个十分古怪的名字,其实反回来叫“初始化即获取资源”会贴切许多。

 

不论它的名字有多古怪,它的作用和影响都是勿庸置疑的。

 

class Resourse { //TODO... }; template class ResourseHandle { public: //初始化时即获取资源 explicit ResourseHandle(T* t) : t_(t) { } //析构时释放资源 ~ResourseHandle() { delete t_; } //访问资源 T* Get() { return t_; } private: T* t_; };

 

原文里面是没有模板的。

现在我们给它加入模板之后,大家看它的作用:

void Test() { Resourse* r = new Resourse(); //... if (iWantToExit) { return; } //... SomeExceptionsIDonotKnow(); //... delete r; //can we get here? } void Test1() { Resourse* r = new Resourse(); ResourseHandle hRes(r); //... if (iWantToExit) { return; } //... SomeExceptionsIDonotKnow(); //... //and now it's ok! }

 

大家看,这是多么简单而实用的技术啊!

千万记住,ResourseHandle对象不要分配到堆上。

你可能感兴趣的:(程序员的脚步)