RAII技术

RAII技术RAII Resourceacqu 资源获取即初始化 它是一项很简单的技术 利用 C 对象生命周期的概念来控制程序的资源 例如内存 文件句柄 网络连接以及审计追踪 audittrail 等 若希望保持对某个重要资源的跟踪 那么创建一个对象 并将资源的生命周期和对象的生命周期相关联 即 调用类构造函数中初始化资源类对象 在调用类析构函数中释放资源

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

(0)
上一篇 2026年3月18日 下午9:11
下一篇 2026年3月18日 下午9:12


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号