RAII trong C ++
RAII (Resource Acquisition Is Initialization) là kỹ thuật C ++ kiểm soát vòng đời của tài nguyên. Nó là một biến thể của lớp và được gắn với thời gian tồn tại của đối tượng.
Nó đóng gói một số tài nguyên vào lớp trong đó việc cấp phát tài nguyên được thực hiện bởi phương thức khởi tạo trong quá trình tạo đối tượng và việc phân bổ tài nguyên được thực hiện bởi hàm hủy trong quá trình hủy đối tượng.
Tài nguyên được đảm bảo sẽ được lưu giữ cho đến khi đối tượng còn sống.
Ví dụ
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; }
Con trỏ thông minh trong C ++ &trừ;
Con trỏ thông minh là một kiểu dữ liệu trừu tượng bằng cách sử dụng nó, chúng ta có thể tạo một con trỏ bình thường theo cách mà nó có thể được sử dụng làm quản lý bộ nhớ như xử lý tệp, ổ cắm mạng, v.v., nó cũng có thể làm nhiều việc như hủy tự động, đếm tham chiếu, v.v.
Con trỏ thông minh trong C ++, có thể được triển khai dưới dạng lớp mẫu, được nạp chồng bằng toán tử * và ->. auto_ptr, shared_ptr, unique_ptr và yếu_ptr là các dạng con trỏ thông minh có thể được thực hiện bởi các thư viện C ++.
Ví dụ
#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; }
Đầu ra
Value is: 26