首页 > 编程语言 >C++ RALL机制理解

C++ RALL机制理解

时间:2024-01-26 16:59:41浏览次数:28  
标签:调用 变量 理解 C++ 互斥 RALL 线程 析构 资源

#########################RALL机制(将资源的生命周期与对象的生命周期所绑定(构造获取资源/析构释放资源,利用了栈上的变量在离开作用域的时候会析构的特性)
RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,
最后在对象析构的时候,释放构造时获取的资源
我们在一个函数内部使用局部变量,当退出了这个局部变量的作用域时,这个变量也就别销毁了;当这个变量是类对象时,这个时候,就会自动调用这个类的析构函数,而这一切都是自动发生的,不要程序员显示的去调用完成。这个也太好了,RAII就是这样去完成的。
由于系统的资源不具有自动释放的功能,而C++中的类具有自动调用析构函数的功能。如果把资源用类进行封装起来,对资源操作都封装在类的内部,在析构函数中进行释放资源。当定义的局部变量的生命结束时,它的析构函数就会自动的被调用,如此,就不用程序员显示的去调用释放资源的操作了.

1. 资源创建
2. 资源使用
3. 资源销毁

关于互斥锁和条件变量:
互斥量可以保护共享数据的修改,如果线程正在等待共享数据的某个条件出现,仅用互斥量的话就需要反复对互斥对象锁定解锁,以检查值的变化,这样将频繁查询的效率非常低。
条件变量可以让等待共享数据条件的线程进入休眠,并在条件达成时唤醒等待线程,提供一种更高效的线程同步方式。条件变量一般和互斥锁同时使用,提供一种更高效的线程同步方式。

 

标签:调用,变量,理解,C++,互斥,RALL,线程,析构,资源
From: https://www.cnblogs.com/weijian168/p/17989724

相关文章

  • C++ 单例模式
    单例模式写法:注意:静态成员使用指针的话,程序退出时无法指针类的析构函数,在类内添加回收单例的类,析构的时候将该单例对象析构,就可以了例如:classSingleton{public: staticSingleton*getInstance() { if(m_pInstance==nullptr)//静态成员使用指......
  • C转C++速成浅入浅出系列——STL之queue
    本系列为应付考研复试用,知识浅入浅出,很多地方不深究细节原理;如有谬误,欢迎大家指出。queue【queue:队伍,队列】(学过数据结构的熟的不能再熟了吧)理解为队列。特点是①先入先出②只能对队伍的队首进行出队操作,对队伍的队尾进行入队操作。需提供头文件#include<queue>由于队列的......
  • C转C++速成浅入浅出系列——STL之stack
    本系列为应付考研复试用,知识浅入浅出,很多地方不深究细节原理;如有谬误,欢迎大家指出。stack【stack:栈】(学过数据结构的熟的不能再熟了吧)理解为栈。特点是①先入后出②只能操作栈顶元素需提供头文件#include<stack>由于栈的特性,只能对栈顶元素进行操作,故不可使用.begin()方法......
  • 在Linux Ubuntu系统中部署C++环境与Visual Studio Code软件
      本文介绍在LinuxUbuntu操作系统下,配置VisualStudioCode软件与C++代码开发环境的方法。  在文章VMware虚拟机部署LinuxUbuntu系统的方法中,我们介绍了LinuxUbuntu操作系统的下载、安装方法;本文则基于前述基础,继续介绍在LinuxUbuntu操作系统中配置VisualStudioCode软......
  • 【C++入门到精通】C++入门 —— list (STL)
    @TOC前言文章绑定了VS平台下std::list的源码,大家可以下载了解一下......
  • C++类的继承
    类的继承的概念及定义继承的概念类的继承即对类设计层次的复用,可以在保持原有类结构的基础上对类进行进一步拓展,完成类的继承后,原有的类称为基类/父类,继承的类称为派生类/子类如何定义一个继承类定义一个继承类的基本语法如下classPerson{};classStudent:publicPerson{};......
  • 01 | C++关键字const/volatile
    const与volatileconst从字面意思上是表示“常量”。最基础的用法就是定义程序用到的数字、字符串常量,代替宏定义。constintMAX_LEN=1024;conststd::stringNAME="metroid";不过从C++程序的生命周期角度来看的话,const定义的常量和宏定义还是有本质的区别:const定义......
  • 人人看得懂的ChatGPT技术原理解析
    人人看得懂的ChatGPT技术原理解析编者按:自ChatGPT面世以来,我们在热切挖掘其丰富应用的同时,也在孜孜探求其背后的工作原理。今天我们为大家带来的文章,深入浅出地阐释了ChatGPT背后的技术原理,没有NLP或算法经验的小伙伴,也可以轻松理解ChatGPT是如何工作的。以下是译文,Enjoy!......
  • 关于使用c++制作蓝牙连接,Windows版本
    1#define_CRT_SECURE_NO_WARNINGS2#pragmawarning(disable:4995)3#include<iostream>4#include<string>5#include<vector>6#include<sstream>7#include<iomanip>8#include<windows.h......
  • C++教程——初识C++(运算符)
    前一节我们初步认识出c++是一门面向对象的程序设计语言,并且我们初步认识了变量,数据类型,常量,输入输出以及合法的标识符命名规则,接下来我们要学习的是运算符。在c++中有逻辑运算符,赋值运算符,算数运算符,位运算符,关系运算符和杂项运算符。先从简单的算数运算符开始讲起,算数运算符简单来......