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调用卡住的案例