用RAII的思想去管理Windows的读写锁SRWLock

前言

最近对C++的RAII(资源申请初始化),又有了新的理解。

我们C++中使用一个资源(例如 内存)的步骤:

  1. 申请资源
  2. 使用资源
  3. 释放资源

简述一下RAII:

就是可以自动回收资源,将资源封装成对象。

关键在于:
变量的生命周期结束后,会自动释放变量。
例如一个变量是局部变量,存储在栈上,那么当该函数结束后,这个变量就已经被释放掉了。
那么,当变量是类变量的时候,当该类对象变量生命周期结束后,应该调用析构函数释放掉该资源!

生命周期

局部变量:存储在栈上,生命周期结束后,由栈释放。
全局或静态变量:存储在data段,生命周期是整个进程,自动释放。
堆上对象:存储在堆上,生命周期结束后,由编程人员释放。

我们申请内存的时候,就是在申请堆上的资源,所以需要我们手动释放,当我们忘记释放的时候,就会引起内存泄漏!

那么我们通过RAII的思想就可以解决这个问题!
使用栈上对象管理堆上的对象,通过析构函数,就可以确定资源释放的实际!

RAII 举例

实际上智能指针就是利用了RAII的思想。
这里简述一下:
构造函数申请指针资源,然后进行使用,当生命周期结束,析构函数会释放资源!

template<class T>
class smart_ptr
{
   
public:
	smart_ptr()(T* ptr = nullptr)
		:_ptr(ptr)
	{
   
		// 构造函数
	}
	~smart_ptr()
	{
   
		// 析构函数
		if (_ptr)
			delete _ptr;
	}
	//智能指针的第二个特性
	T<
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RAII(资源获取即初始化)机制是一种C++编程技术,通过在对象的构造函数中获得资源并在析构函数中释放资源,以确保资源的正确管理和释放,从而避免了资源泄漏和错误处理的繁琐性。 当容器对象作为类的成员时,可以使用RAII机制来管理容器的生命周期。例如,可以定义一个包含容器成员的类,并在该类的构造函数中初始化容器,并在析构函数中释放容器。在这种情况下,当类对象超出范围或删除时,它将自动调用析构函数来释放容器,从而避免了手动管理容器的麻烦。 例如,以下示例代码演示了如何使用RAII机制在C++中进行容器成员管理: ```c++ #include <iostream> #include <vector> class MyClass { public: MyClass() { // 初始化容器成员 vec = new std::vector<int>(); for (int i = 0; i < 10; ++i) { vec->push_back(i); } } ~MyClass() { // 释放容器成员 delete vec; } private: std::vector<int>* vec; }; int main() { MyClass obj; // 创建对象 // ... return 0; } ``` 在这个例子中,MyClass类包含一个std::vector<int>类型的成员变量vec。在MyClass的构造函数中,我们使用new运算符为vec分配了内存空间,并初始化了10个整数。在MyClass的析构函数中,我们使用delete运算符释放了vec的内存空间。这样,当MyClass对象超出范围或被删除时,它将自动调用析构函数来释放vec的内存空间,从而确保了容器的正确管理和释放。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值