>  기사  >  백엔드 개발  >  C++ 스마트 포인터: 수명 주기에 대한 포괄적인 분석

C++ 스마트 포인터: 수명 주기에 대한 포괄적인 분석

WBOY
WBOY원래의
2024-05-09 11:06:02735검색

C++ 스마트 포인터 수명 주기: 생성: 메모리가 할당될 때 스마트 포인터를 생성합니다. 소유권 이전: 이동 작업을 통해 소유권을 이전합니다. 해제: 스마트 포인터가 범위를 벗어나거나 명시적으로 해제되면 메모리가 해제됩니다. 객체 소멸: 가리키는 객체가 소멸되면 스마트 포인터는 유효하지 않은 포인터가 됩니다.

C++ 智能指针:全面剖析其生命周期

C++ 스마트 포인터: 수명 주기에 대한 종합 분석

소개

스마트 포인터는 동적으로 할당된 메모리를 관리하는 데 사용되는 C++의 특수 포인터입니다. 원시 포인터와 달리 스마트 포인터는 가리키는 개체의 메모리 상태를 추적하고 개체가 더 이상 필요하지 않을 때 해당 메모리를 자동으로 해제하는 역할을 합니다. 이는 메모리 누수 및 매달린 포인터와 같은 일반적인 프로그래밍 오류를 방지하는 데 도움이 됩니다.

유형

C++ 표준 라이브러리는 네 가지 주요 스마트 포인터 유형을 제공합니다.

  • unique_ptr8742468051c85b06f0a0af9e3e506b5c: 고유 소유 포인터. 한 번에 하나의 Unique_ptr만 개체를 ​​가리킬 수 있습니다.
  • shared_ptr8742468051c85b06f0a0af9e3e506b5c: 공유 소유권을 가리키는 포인터입니다. 동일한 객체를 가리키는 shared_ptr이 여러 개 있을 수 있습니다.
  • weak_ptr8742468051c85b06f0a0af9e3e506b5c: 약한 참조 포인터. Weak_ptr은 개체가 파괴되는 것을 방지하지 않으며 shared_ptr과 함께 사용해야 합니다.
  • auto_ptr8742468051c85b06f0a0af9e3e506b5c: 버려졌습니다. C++11에서 제거되었습니다.

Lifecycle

1. Creation

원시 포인터를 사용하는 것처럼 객체가 메모리를 할당할 때 스마트 포인터를 생성할 수 있습니다.

auto ptr = std::make_unique<int>(42);

2. 스마트 포인터는 다음으로 이동할 수 있습니다. move) 작업 소유권 이전:

auto ptr2 = std::move(ptr);  // ptr2 现在拥有对整数对象的唯一所有权

3. Release

스마트 포인터가 해당 범위를 벗어나거나 명시적으로 해제되면 소유한 메모리가 해제됩니다.

{
    auto ptr = std::make_unique<int>(42);
    // ...
}  // ptr 在此处释放

4. 객체가 소멸되면 스마트 포인터는 유효하지 않은 포인터가 됩니다:

int* ptr = new int(42);
auto sptr = std::make_shared<int>(ptr);
delete ptr;  // ptr 被销毁
sptr->get();  // sptr 现在指向一个无效指针,因此 get() 会抛出异常

실용적인 예

스마트 포인터를 사용하여 동적으로 할당된 배열을 관리하는 방법은 다음과 같습니다.

// 原始指针版本
int* arr = new int[10];  // 分配数组

// ...

delete[] arr;  // 释放数组

// 智能指针版本
std::unique_ptr<int[]> arr = std::make_unique<int[]>(10);  // 分配数组

// ...

// arr 在离开范围时自动释放

스마트 포인터 버전은 메모리를 방지하므로 더 안전합니다. 누수 및 매달린 포인터.

위 내용은 C++ 스마트 포인터: 수명 주기에 대한 포괄적인 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.