> 백엔드 개발 > C++ > C++ 스마트 포인터: 기초부터 고급까지

C++ 스마트 포인터: 기초부터 고급까지

WBOY
풀어 주다: 2024-05-09 21:27:02
원래의
914명이 탐색했습니다.

스마트 포인터는 힙 메모리 개체를 자동으로 해제하고 메모리 오류를 방지할 수 있는 C++ 관련 포인터입니다. 유형은 다음과 같습니다: Unique_ptr: 독점 소유권, 단일 객체를 가리킵니다. shared_ptr: 공유 소유권으로, 여러 포인터가 동시에 객체를 관리할 수 있습니다. Weak_ptr: 약한 참조, 참조 횟수를 늘리지 않고 순환 참조를 방지합니다. 사용법: std 네임스페이스의 make_unique, make_shared 및 make_weak를 사용하여 스마트 포인터를 만듭니다. 스마트 포인터는 범위가 끝나면 자동으로 개체 메모리를 해제합니다. 고급 사용법: 사용자 정의 삭제자를 사용하여 객체가 해제되는 방식을 제어할 수 있습니다. 스마트 포인터는 동적 배열을 효과적으로 관리하고 메모리 누수를 방지할 수 있습니다.

C++ 智能指针:从基础到高级

기본에서 고급까지: C++ 스마트 포인터

소개

스마트 포인터는 메모리 관리 문제를 해결하도록 설계된 C++의 특수 포인터입니다. 포인터가 객체를 가리키는 힙 메모리의 공간을 자동으로 해제함으로써 메모리 누수 및 매달린 포인터와 같은 수동 메모리 관리로 인해 발생하는 일반적인 메모리 오류를 효과적으로 방지합니다.

유형

C++에는 여러 가지 스마트 포인터 유형이 있으며 각각 고유한 기능과 용도가 있습니다.

  • unique_ptr: 하나의 포인터로만 관리할 수 있는 개체를 가리키는 독점 소유권 스마트 포인터 .
  • shared_ptr: 소유권이 공유되는 스마트 포인터로, 여러 포인터가 동시에 동일한 개체를 관리할 수 있습니다.
  • weak_ptr: 객체의 참조 횟수를 늘리지 않고 순환 참조를 피하는 데 사용되는 약한 참조 스마트 포인터입니다.

기본 사용법

스마트 포인터를 만들려면 std 네임스페이스에서 해당 유형 템플릿을 사용하세요. std 命名空间中的相应类型模板:

// 独占所有权
unique_ptr<int> p1 = make_unique<int>(42);

// 共享所有权
shared_ptr<int> p2 = make_shared<int>(10);

// 弱引用
weak_ptr<int> p3 = p2;
로그인 후 복사

释放内存

智能指针会在其作用域结束时自动释放所指向的对象。因此,不需要手动调用 deletefree

实战案例:动态数组管理

使用智能指针管理动态数组,可以避免因忘记手动释放空间而导致的内存泄漏:

// 普通的动态数组管理
int* arr = new int[100];

// 智能指针管理动态数组
unique_ptr<int[]> arr = make_unique<int[]>(100);
로그인 후 복사

arr 超出其作用域时,智能指针会自动删除数组。这确保了在所有情况下都释放了资源。

高级用法:自定义删除器

某些情况下,可能需要使用自定义删除器来控制指针指向对象的释放方式。这可以通过重载 delete

class MyObject {
public:
    ~MyObject() {
        // 自定义删除逻辑
    }
};

int main() {
    unique_ptr<MyObject, decltype(&MyObject::delete)> p = make_unique<MyObject>(&MyObject::delete);
}
로그인 후 복사

Release memory

스마트 포인터는 범위가 끝나면 자동으로 종료됩니다. 뾰족한 물체를 놓습니다. 따라서 수동으로 delete 또는 free를 호출할 필요가 없습니다.

🎜실용 사례: 동적 배열 관리🎜🎜🎜스마트 포인터를 사용하여 동적 배열을 관리하여 공간을 수동으로 해제하는 것을 잊어버려서 발생하는 메모리 누수를 방지하세요. 🎜rrreee🎜arr가 해당 범위를 초과하면 스마트 포인터가 자동으로 배열을 삭제합니다. 이렇게 하면 모든 경우에 리소스가 해제됩니다. 🎜🎜🎜고급 사용법: 사용자 정의 삭제기🎜🎜🎜경우에 따라 포인터가 가리키는 개체가 해제되는 방식을 제어하기 위해 사용자 정의 삭제기를 사용해야 할 수도 있습니다. 이는 delete 연산자를 오버로드하여 달성할 수 있습니다. 🎜rrreee🎜🎜결론🎜🎜🎜스마트 포인터를 C++ 코드 베이스에 통합함으로써 개발자는 일반적인 실수를 피하면서 메모리 관리 효율성을 크게 향상시킬 수 있습니다. 이를 통해 더욱 강력하고 안정적인 애플리케이션을 구축할 수 있습니다. 🎜

위 내용은 C++ 스마트 포인터: 기초부터 고급까지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿