RAII_51CTO博客
RAII(资源获取即初始化,Resource Acquisition Is Initialization),在使用资源的类的构造函数中申请资源,然后使用,最后在析构函数中翻译资源
原创 2023-04-10 19:43:05
100阅读
RAII[1]  (Resource Acquisition Is Initialization),也称为“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII 的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时
转载 精选 2015-08-31 21:00:57
327阅读
RAII,也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。简单的说,RAII 的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候释放资源。例如,我们无需直接调用一对非成员函数OpenPort/ClosePo...
原创 2021-09-01 13:38:34
210阅读
这些业务往往都是在和资源打交道,从而基本都是刚刚说的要删除拷贝函数的那一类,解决这种需求,几乎总是在用 shared_ptr 的模式,于是 Java 和 Python 干
原创 2023-04-06 13:38:30
69阅读
什么是RAIIResource Acquisition Is Initialization,资源获取即初始化,将资源的生命周期与一个对象的生命周期绑定,举例来说就是,把一些资源封装在类中,在构造函数请求资源,在析构函数中释放资源且绝不抛出异常,而一个对象在生命周期结束时会自动调用析构函数,即资源的生命周期与一个对象的生命周期绑定。RAII的应用见如下代码:std::mutex mutex;void
原创 2021-01-25 21:41:32
231阅读
析构函数不能抛出异常,原因析构函数已经变成了异常处理的一部分如果对象出了异常,现在异常处理模块为了维护系统对象数据的一致性,避免资源泄漏,有责任释放这个对象的资源,调用对象的析构函数,可现在假如析构过程又再出现异常,那么请问由谁来保证这个对象的资源释放呢?而且这新出现的异常又由谁来处理呢?咋办呢?3...
转载 2015-04-30 23:25:00
37阅读
2评论
目录 介绍 RAII技术在锁上的应用 互斥锁 RAII技术在指针上的应用 智能指针 介绍 RAII :Resource Acquisition Is Initialisation (RAII) (任何资源的获取都应该发生在类的构造函数中,资源的释放应发生在...
转载 2020-04-11 23:21:00
67阅读
2评论
Resource Acquisition Is Initialization,资源获取即初始化,将资源的生命周期与一个对象的生命周期绑定,举例来说就是,把一些资源封装在类中,在构造函数请求资源,在析构函数中释放资源且绝不抛出异常,而一个对象在生命周期结束时会自动调用析构函数,即资源的生命周期与一个对象的生命周期绑定。
原创 2021-07-09 14:51:56
133阅读
先来看一小段代码,它取自 Bjarne Stroustrup 的演讲“Speaking C++ as a Native”: // use an object to represent a resource ("resource acquisition is init...
转载 2008-05-01 22:04:00
134阅读
2评论
RAII(Resource Acquisition Is Initialization),即资源获取就是初始化,是一种管理资源的机制。如管理new操作符的资源:class A{public: int *p;
原创 2021-12-27 09:36:46
136阅读
RAII:资源分配及初始化。但是这个翻译并没有显示出这个惯用法的真正内涵。RAII的好处在于它提供了一种资源自动管理的方式,当出现异常,回滚等现象时,RAII可以正确的释放资源。内存泄漏会导致:            1.内存耗尽 2.其他程序可能用不了了 3.程序崩溃在资源的获取和释放之间,我们通常会使用资源,但常常一些不可预计的异常会
原创 2016-04-06 20:54:09
1318阅读
4点赞
1评论
1.什么是RAIIRAII(Resource Acquisition Is Initialization)机制是Bjarne Stroustrup首
原创 2022-12-13 15:46:37
190阅读
灵巧指针到底有多灵巧~
原创 2016-04-04 17:04:10
936阅读
2点赞
简单的实现RAII封装。前面的文章中介绍了通过RAII的技术实现保证资源被释放和某函数被执行的类似finally关键字的功能。并演示了一个通过boost的function和bind的两个库实现的通用RAII封装类。 那个例子固然通用而有效,然而,我们有时项目中并没有用到boost库,就要自己封装一个了。 #include <iostream>using namespace s
转载 2007-09-12 15:21:00
272阅读
2评论
尽管有许多的争议,但我还是觉得 C++ 中的 RAII 惯用法是个好东西,也是写 C 代码时唯一怀念的 C++ 特性。下面是一些 C 语言实现 RAII 的方法: gcc GCC 上可以使用cleanup 扩展实现 Windows Windows 下可以使用SEH的__try/__finally,话
原创 2021-10-22 14:09:26
85阅读
介绍RAII :Resource Acquisition Is Initialisation (RAII)(任何资源的获取都应该发生在类的构造函数中,资源的释放应发生在析构函数中,即资源的生命周期与对象绑定)RAII是一种使用在面向对象语言中的资源(内存,互斥锁,或者文件描述符)管理机制,使用RAII的语言中,最出名的当属C++和RUST。对C++来说,许多公司已经开始禁用裸指针(强制...
原创 2021-09-28 15:12:51
93阅读
尽管有许多的争议,但我还是觉得 C++ 中的 RAII 惯用法是个好东西,也是写 C 代码时唯一怀念的 C++ 特性。下面是一些 C 语言实现 RAII 的方法:gccGCC 上可以使用cleanup 扩展实现#define RAII_VARIABLE(vartype,varname,initval,dtor) \ void _dtor_ ## varname (vartyp...
转载 2021-10-25 16:38:11
246阅读
尽管有许多的争议,但我还是觉得 C++ 中的 RAII 惯用法是个好东西,也是写 C 代码时唯一怀念的 C++ 特性。下面是一些 C 语言实现 RAII 的方法:gccGCC 上可以使用cleanup 扩展实现#define RAII_VARIABLE(vartype,varname,initval,dtor) \ void _dtor_ ## varname (vartyp...
转载 2022-01-29 11:29:57
183阅读
http://www.jellythink.com/archives/101前言在写C++设计模式——单例模式的时候,在写到实例销毁时,设计的GC类是很巧妙的,而这一巧妙的设计就是根据当对象的生命周期结束时会自动调用其析构函数的,而这一巧妙的设计也是有专业的名词的——RAII。那以下将围绕RAII,...
转载 2015-07-30 17:19:00
58阅读
2评论
C++中的RAII全称是“Resource acquisition is initialization”,直译为“资源获取就是初始化”。但是这翻译并没有显示出这个惯用法的真正内涵。RAII的好处在于它提供了一种资源自动管理的方式,当产生异常、回滚等现象时,RAII可以正确地释放掉资源。举个常见的例子:  void Func()  {    FILE *fp;     char* filename 
转载 2017-07-27 19:34:00
81阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5