首页  

C++ RAII 简介     所属分类 c 浏览量 873
RAII 是 C++ 中管理资源的最佳方法,实现安全、简洁的状态管理,编写出优雅的异常安全的代码
C++发明者Bjarne Stroustrup提出的概念
Resource Acquisition is Initialization

资源获取即初始化,在构造函数中申请分配资源,在析构函数中释放资源
对象创建时,自动调用构造函数,当对象超出作用域时自动调用析构函数
将资源和对象的生命周期绑定

智能指针(std::shared_ptr和std::unique_ptr)即RAII最具代表的实现
使用智能指针,可以实现自动的内存管理
有了智能指针,代码中几乎不需要再出现delete了

更加广义的资源管理 
文件的打开与关闭 句柄的获取与释放等
手动释放,要考虑各种异常处理

void function()
{
    FILE *f = fopen("test.txt", 'r');
    if (.....)
    {
        fclose(f);
        return;
    }
    else if(.....)
    {
        fclose(f);
        return;
    }

    fclose(f);
    ......
}


std::mutex mutex_; void function() { mutex_.lock(); ...... ...... mutex_.unlock(); } 互斥量lock和unlock之间的代码很可能会出现异常,或者有return语句, 这样的话,互斥量 不能正常 unlock,导致线程死锁 正确的方式是使用std::unique_lock或者std::lock_guard对互斥量进行状态管理 std::mutex mutex_; void function() { std::lock_guard< std::mutex> lock(mutex_); ...... ...... } 创建std::lock_guard对象时,对std::mutex对象进行lock, 当std::lock_guard对象超出作用域时,自动解锁

上一篇     下一篇
GO为什么没有虚拟机

Rust语言设计理念及优缺点

mysql DATE_ADD 函数

GO 和 RUST

gcc编译过程

HTTP调用卡住的案例