C ++中的RAII和智能指针

C ++中的RAII

RAII(资源获取即初始化)是控制资源生命周期的C ++技术。它是类的变体,与对象生存时间相关。

它将几种资源封装到类中,其中在对象创建期间由构造函数完成资源分配,而在对象破坏期间由析构函数完成资源释放。

保证将资源保留到对象处于活动状态。

示例

void file_write {
   Static mutex m; //mutex to protect file access
   lock_guard<mutex> lock(m); //lock mutex before accessing file
   ofstream file("a.txt");
   if (!file.is_open()) //if file is not open
   throw runtime_error("unable to open file");
   //写文本到文件
   file << text << stdendl;
}

C ++中的智能指针和减号;

智能指针是一种抽象的数据类型,使用它我们可以以一种普通的指针的形式将其用作诸如文件处理,网络套接字等的内存管理,还可以执行自动销毁,引用计数等许多功能。

C ++中的智能指针可以实现为模板类,并通过*和->运算符进行重载。auto_ptr,shared_ptr,unique_ptr和weak_ptr是可以由C ++库实现的智能指针形式。

示例

#include <iostream>
using namespace std;
//通用智能指针类
template <class T>
class Smartpointer {
   T *p; // Actual pointer
   public:
      //构造函数
      Smartpointer(T *ptr = NULL) {
         p = ptr;
      }
   //析构函数
   ~Smartpointer() {
      delete(p);
   }
   //重载解引用运算符
   T & operator * () {
      return *p;
   }
   //重载箭头运算符,以便可以访问T的成员
   //像指针
   T * operator -> () {
      return p;
   }
};
int main() {
   Smartpointer<int> p(new int());
   *p = 26;
   cout << "Value is: "<<*p;
   return 0;
}

输出结果

Value is: 26