C++中的智能指针和内存管理

本文最后更新于:2023年9月17日 晚上

标题:C++中的智能指针和内存管理

简介:
在C++中,手动管理内存是一个容易出错且容易导致内存泄漏的任务。智能指针是一种特殊的指针类,可以自动管理内存生命周期,大大减少了内存管理的复杂性。

正文:

1. 原始指针 vs. 智能指针

原始指针是直接指向内存地址的指针,需要手动释放内存。

1
2
3
int* rawPtr = new int(5);
// 使用 rawPtr
delete rawPtr; // 手动释放内存

智能指针是一个包装了原始指针的类,它会在超出作用域时自动释放内存。

1
2
std::unique_ptr<int> smartPtr = std::make_unique<int>(5);
// 不需要手动释放内存

2. unique_ptr

std::unique_ptr 是一个独占所有权的智能指针,它确保只有一个指针可以指向特定的资源。

1
std::unique_ptr<int> uniquePtr = std::make_unique<int>(10);

3. shared_ptr

std::shared_ptr 允许多个指针共享对同一资源的所有权。它使用引用计数来跟踪资源的引用次数。

1
2
std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(20);
std::shared_ptr<int> sharedPtr2 = sharedPtr1; // 共享所有权

4. weak_ptr

std::weak_ptrstd::shared_ptr 的弱引用,它不会增加引用计数。它通常用于避免循环引用的问题。

1
2
std::shared_ptr<int> sharedPtr = std::make_shared<int>(30);
std::weak_ptr<int> weakPtr = sharedPtr;

5. RAII(资源获取即初始化)

RAII 是一种C++编程技巧,它利用了对象的生命周期来管理资源。智能指针是RAII的一个典型应用。

结论:

使用智能指针可以极大地简化C++中的内存管理,避免内存泄漏和悬空指针等问题。std::unique_ptr 用于独占资源,std::shared_ptr 用于共享资源,而 std::weak_ptr 则用于弱引用,避免循环引用。


C++中的智能指针和内存管理
https://jinbilianshao.github.io/2023/09/17/C-中的智能指针和内存管理/
作者
连思鑫
发布于
2023年9月17日
许可协议