C++ 스마트 포인터: 포인터의 진화, 메모리 문제에 대한 좋은 솔루션

WBOY
发布: 2024-05-09 11:09:02
原创
258명이 탐색했습니다.

스마트 포인터는 메모리 릴리스를 자동으로 관리하여 메모리 관리 문제를 해결하는 C++ 도구입니다. 일반적으로 사용되는 스마트 포인터 유형은 다음과 같습니다: Unique_ptr: 독점 소유권, 소멸 시 지적 객체를 해제합니다. shared_ptr: 공유 소유권, 참조 계산은 포인터 수를 추적하고 마지막 포인터가 소멸되면 객체가 해제됩니다. weak_ptr: 약한 참조는 객체 수명주기를 늘리지 않으며 shared_ptr과 조합해서만 사용할 수 있습니다.

C++ 智能指针:指针的进化,解决内存问题的良药

C++ 스마트 포인터: 포인터의 진화, 메모리 문제에 대한 좋은 솔루션

스마트 포인터는 메모리 릴리스를 자동으로 관리하여 메모리 누수 및 와일드 포인터와 같은 문제를 해결하는 데 도움이 되는 C++의 강력한 도구입니다. 기존 포인터에 비해 스마트 포인터는 더 안전하고 효율적이므로 프로그래머는 지루한 메모리 관리 세부 사항에 대해 걱정하지 않고 비즈니스 로직 작성에 집중할 수 있습니다.

여러 공통 스마트 포인터

unique_ptr

  • 독점 소유권, 단 하나의 개체만 가리킵니다.
  • unique_ptr이 소멸되면 그것이 가리키는 객체도 소멸됩니다.

shared_ptr

  • 공유 소유권을 통해 여러 개체가 동일한 메모리 블록을 가리킬 수 있습니다.
  • 참조 카운트는 포인터 수를 추적합니다. 마지막 shared_ptr이 삭제되면 가리키는 개체도 삭제됩니다.

weak_ptr

  • 약한 참조는 지적 객체의 수명 주기를 늘리지 않습니다.
  • shared_ptr과 함께만 사용할 수 있습니다. 마지막 shared_ptr이 삭제되면 약한_ptr이 무효화됩니다.

실용 사례

사람을 나타내는 Person 클래스가 있다고 가정해 보겠습니다. 우리의 목표는 Person 개체를 저장하는 벡터를 만들고 벡터가 범위를 벗어날 때 메모리가 자동으로 해제되도록 하는 것입니다. Person 类,它表示一个人。我们的目标是创建一个存储 Person 对象的向量,并确保当向量超出了作用域时,内存会被自动释放。

#include 
#include 
#include 

class Person {
public:
    Person(const std::string& name) : name(name) {}
    ~Person() { std::cout << "Destructor called for " << name << std::endl; }

private:
    std::string name;
};

int main() {
    std::vector> people;

    // 添加几个 Person 对象
    people.push_back(std::make_shared("John"));
    people.push_back(std::make_shared("Mary"));
    people.push_back(std::make_shared("Bob"));

    // 遍历并打印名称
    for (const auto& person : people) {
        std::cout << person->name << std::endl;
    }

    return 0;
}
登录后复制

输出:

John
Mary
Bob
Destructor called for John
Destructor called for Mary
Destructor called for Bob
登录后复制

在示例中,我们使用 std::shared_ptr 来存储 Person 对象的指针。当 people 向量超出作用域销毁时,智能指针也会随之销毁。这将自动释放 Personrrreee

출력: 🎜rrreee🎜예제에서는 std::shared_ptr을 사용하여 Person 개체의 포인터를 저장합니다. people 벡터가 범위 밖에서 소멸되면 스마트 포인터도 소멸됩니다. 이렇게 하면 Person 개체가 차지하는 메모리가 자동으로 해제되고 메모리 누수를 방지할 수 있습니다. 🎜

위 내용은 C++ 스마트 포인터: 포인터의 진화, 메모리 문제에 대한 좋은 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

相关标签:
来源:php.cn
본 웹사이트의 성명
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
더>
最新下载
더>
网站特效
网站源码
网站素材
프론트엔드 템플릿
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!