C++ 中的 RA​​II 和智能指针


C++ 中的 RA​​II

RA​​II(资源获取即初始化)是 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");
   // write text to file
   file << text << stdendl;
}

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

智能指针是一种抽象数据类型,我们可以使用它以一种方式制作一个普通指针,使其可以像文件处理、网络套接字等内存管理一样使用,此外它还可以做很多事情,如自动销毁、引用计数等。

C++ 中的智能指针可以实现为模板类,它重载了 * 和 -> 运算符。auto_ptr、shared_ptr、unique_ptr 和 weak_ptr 是 C++ 库可以实现的智能指针形式。

示例

 实时演示

#include <iostream>
using namespace std;
// A generic smart pointer class
template <class T>
class Smartpointer {
   T *p; // Actual pointer
   public:
      // Constructor
      Smartpointer(T *ptr = NULL) {
         p = ptr;
      }
   // Destructor
   ~Smartpointer() {
      delete(p);
   }
   // Overloading de-referencing operator
   T & operator * () {
      return *p;
   }
   // Over loading arrow operator so that members of T can be accessed
   // like a pointer
   T * operator -> () {
      return p;
   }
};
int main() {
   Smartpointer<int> p(new int());
   *p = 26;
   cout << "Value is: "<<*p;
   return 0;
}

输出

Value is: 26

更新时间:2019 年 7 月 30 日

1000 多次浏览

开启您的职业生涯

完成课程以获得认证

开始
广告