C++ 智能指针机制是一种自动管理指向堆内存的指针的机制,可防止内存泄漏和悬空指针。主要包括 unique_ptr(唯一所有权)、shared_ptr(共享所有权)和 weak_ptr(弱引用)。它提供自动释放内存、检查指针有效性等功能,简化内存管理,提高代码安全性。
C++ 智能指针机制
简介
C++ 智能指针是一种自动管理指向堆内存的指针的机制,可简化内存管理并防止内存泄漏和悬空指针等问题。智能指针封装了裸指针(raw pointer),并提供了额外的功能,例如自动释放内存和检查指针的有效性。
关键概念
实施
#include <memory> // 使用 unique_ptr std::unique_ptr<int> uptr = std::make_unique<int>(10); *uptr = 20; // 使用 shared_ptr std::shared_ptr<std::vector<int>> sptr = std::make_shared<std::vector<int>>(); sptr->push_back(1); sptr->push_back(2); // 使用 weak_ptr std::weak_ptr<int> wptr(uptr); if (auto sptr2 = wptr.lock()) { *sptr2 = 30; }
实战案例
示例 1:防止内存泄漏
下面的代码使用原始指针来管理动态分配的内存。如果不小心手动释放内存,就会发生内存泄漏。
int* ptr = new int(10); // ... delete ptr; // 必须记住释放内存
使用智能指针可以防止这种问题:
std::unique_ptr<int> uptr = std::make_unique<int>(10); // ... // uptr 会自动在析构时释放内存
示例 2:共享所有权
考虑以下情况,两个函数都使用同一个动态分配的字符串。原始指针不允许共享所有权,这可能导致程序错误:
char* strPtr = new char[100]; void func1() { // 使用 strPtr } void func2() { // 也使用 strPtr }
使用 shared_ptr 可以解决此问题:
std::shared_ptr<char[]> strPtr = std::make_shared<char[]>(100); void func1() { // 使用 strPtr } void func2() { // 也使用 strPtr }
优势
以上是揭秘C++智能指针机制,高效管理内存的详细内容。更多信息请关注PHP中文网其他相关文章!