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"); // 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
广告