스마트 포인터는 메모리 릴리스를 자동으로 관리하여 메모리 관리 문제를 해결하는 C++ 도구입니다. 일반적으로 사용되는 스마트 포인터 유형은 다음과 같습니다: Unique_ptr: 독점 소유권, 소멸 시 지적 객체를 해제합니다. shared_ptr: 공유 소유권, 참조 계산은 포인터 수를 추적하고 마지막 포인터가 소멸되면 객체가 해제됩니다. weak_ptr: 약한 참조는 객체 수명주기를 늘리지 않으며 shared_ptr과 조합해서만 사용할 수 있습니다.
C++ 스마트 포인터: 포인터의 진화, 메모리 문제에 대한 좋은 솔루션
스마트 포인터는 메모리 릴리스를 자동으로 관리하여 메모리 누수 및 와일드 포인터와 같은 문제를 해결하는 데 도움이 되는 C++의 강력한 도구입니다. 기존 포인터에 비해 스마트 포인터는 더 안전하고 효율적이므로 프로그래머는 지루한 메모리 관리 세부 사항에 대해 걱정하지 않고 비즈니스 로직 작성에 집중할 수 있습니다.
unique_ptr
shared_ptr
weak_ptr
사람을 나타내는 Person
클래스가 있다고 가정해 보겠습니다. 우리의 목표는 Person
개체를 저장하는 벡터를 만들고 벡터가 범위를 벗어날 때 메모리가 자동으로 해제되도록 하는 것입니다. Person
类,它表示一个人。我们的目标是创建一个存储 Person
对象的向量,并确保当向量超出了作用域时,内存会被自动释放。
#include <iostream> #include <vector> #include <memory> 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<std::shared_ptr<Person>> people; // 添加几个 Person 对象 people.push_back(std::make_shared<Person>("John")); people.push_back(std::make_shared<Person>("Mary")); people.push_back(std::make_shared<Person>("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_ptr8abf60ac54173a2785e603c7a1f95b4e
来存储 Person
对象的指针。当 people
向量超出作用域销毁时,智能指针也会随之销毁。这将自动释放 Person
rrreee
std::shared_ptr8abf60ac54173a2785e603c7a1f95b4e
을 사용하여 Person
개체의 포인터를 저장합니다. people
벡터가 범위 밖에서 소멸되면 스마트 포인터도 소멸됩니다. 이렇게 하면 Person
개체가 차지하는 메모리가 자동으로 해제되고 메모리 누수를 방지할 수 있습니다. 🎜위 내용은 C++ 스마트 포인터: 포인터의 진화, 메모리 문제에 대한 좋은 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!