Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

RAII และตัวชี้อัจฉริยะใน C++


RAII ใน C++

RAII (Resource Acquisition Is Initialization) เป็นเทคนิค 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 และอ่อนแอ_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