스마트 포인터 개체 관리 C++

개발자 이야기

스마트 포인터 개체 관리 C++

kilius 2023. 3. 18. 21:56
728x90
반응형

스마트 포인터는 동적으로 할당된 개체에 대한 메모리 할당 및 할당 해제를 관리하는 C++ 클래스 유형입니다. 메모리 관리를 개선하고 메모리 누수 및 매달린 포인터의 위험을 줄이도록 설계되었습니다.


스마트 포인터에는 unique_ptr, shared_ptr 및 weak_ptr의 세 가지 주요 유형이 있습니다. 각 유형은 가리키는 개체의 수명 동안 서로 다른 수준의 소유권과 제어를 제공합니다.


unique_ptr은 개체를 독점적으로 소유하는 스마트 포인터입니다. 즉, 주어진 시간에 주어진 개체를 가리키는 unique_ptr은 하나만 있을 수 있습니다. unique_ptr이 소멸되면 가리키는 개체와 연결된 메모리를 자동으로 할당 해제합니다.


반면에 shared_ptr은 동일한 개체에 대한 여러 포인터를 허용하고 참조 계산 메커니즘을 사용하여 개체의 수명을 관리합니다. 개체를 가리키는 모든 shared_ptrs가 소멸되면 개체가 자동으로 할당 해제됩니다.


weak_ptr은 가리키는 개체의 참조 횟수를 늘리지 않고 shared_ptr을 만들 수 있도록 하는 스마트 포인터 유형입니다. 이는 약한_ptrs가 참조 횟수에 기여하지 않기 때문에 순환 참조가 발생할 수 있는 상황에서 유용하므로 개체가 할당 해제되는 것을 막지 않습니다.


스마트 포인터를 사용하면 메모리 관리가 자동으로 처리되고 메모리 누수 및 댕글링 포인터의 위험이 크게 줄어들기 때문에 C++ 프로그래머는 보다 안정적이고 효율적인 코드를 작성할 수 있습니다.

다음은 C++에서 스마트 포인터를 사용하는 간단한 예입니다.

#include <memory>
#include <iostream>

class MyClass {
public:
  MyClass() { std::cout << "MyClass constructor called." << std::endl; }
  ~MyClass() { std::cout << "MyClass destructor called." << std::endl; }
  void doSomething() { std::cout << "Doing something." << std::endl; }
};

int main() {
  std::unique_ptr<MyClass> ptr(new MyClass()); // Create a unique pointer to a new MyClass object
  ptr->doSomething(); // Call a member function on the object using the -> operator
  // The object will automatically be deleted when the pointer goes out of scope
  return 0;
}

 

이 예제에서는 콘솔에 메시지를 인쇄하는 생성자 및 소멸자와 메시지를 인쇄하는 멤버 함수 doSomething()이 있는 간단한 클래스 MyClass를 정의합니다. 그런 다음 새 MyClass 개체에 대한 std::unique_ptr<MyClass> 스마트 포인터를 만들고 -> 연산자를 사용하여 개체에서 doSomething()을 호출합니다. 포인터가 범위를 벗어나면 MyClass 개체가 자동으로 삭제됩니다.

 

728x90
반응형