RAII(Resource acquisition is initialization)资源获取即初始化,它是一项很简单的技术,利用C++对象生命周期的概念来控制程序的资源,例如内存,文件句柄,网络连接以及审计追踪(audit trail)等. 若希望保持对某个重要资源的跟踪,那么创建一个对象,并将资源的生命周期和对象的生命周期相关联。即:调用类构造函数中初始化资源类对象,在调用类析构函数中释放资源类对象。
简单点就是:将堆对象交由栈来管理,栈是有生命周期的,不需要手动释放内存。
应用场景:观察下面这个例子
demo1: class ResourceControl { public: ResourceControl(); ResourceControl(const ResourceControl&); ResourceControl& operator = (const ResourceControl&); ~ResourceControl(); Resource* GetResource(); void Work(); private: Resource *rh_; }; void ResourceControl::Work() { rh_ = new Resource; //… if( //异常出现时,提前结束 ) //糟糕的维护 { return; } //… delete rh_; //一定能执行到这里吗? } Resource * ResourceControl::GetResource( ) { return this->rh_; }
class ResourceControl { public: ResourceControl(Resource *rh); ResourceControl(const ResourceControl&); ResourceControl& operator = (const ResourceControl&); ~ResourceControl(); Resource* GetResource(); void Work(); private: Resource *rh_; }; ResourceControl::ResourceControl(Resource *rh):rh_(rh) { //其他初始化工作 } ResourceControl::~ResourceControl() { delete this->rh_; //其他初始化工作 } Resource* GetResource() { return this->rh_; }
接下来还有一个重要的问题,如何保证析构函数肯定被调用到?
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211952.html原文链接:https://javaforall.net
