Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 RAII 및 스마트 포인터

<시간/>

C++의 RAID

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 및 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