📜  unique ptr c++ (1)

📅  最后修改于: 2023-12-03 14:48:11.058000             🧑  作者: Mango

C++中的unique_ptr

简介

unique_ptr 是 C++11 中的一个智能指针,用于管理动态分配的内存。与 shared_ptr 不同,一个对象只能有一个 unique_ptr 拥有它。当 unique_ptr 被销毁时,它所指向的对象也会被销毁。

使用方法

创建一个 unique_ptr 对象可以通过三种方式:

  1. 使用 std::make_unique 函数创建
#include <memory>

std::unique_ptr<int> ptr1 = std::make_unique<int>(42);
  1. 使用 new 运算符创建
std::unique_ptr<int> ptr2(new int(42));
  1. 转移一个已存在的指针
int* ptr3 = new int(42);
std::unique_ptr<int> ptr4(ptr3);

由于 unique_ptr 管理的是动态分配的内存,所以我们可以使用 resetrelease 函数来管理指针指向的对象。

std::unique_ptr<int> ptr5(new int(42));
int* tmp = ptr5.release(); // 将 ptr5 中的指针转移到 tmp 中
ptr5.reset(new int(0)); // 释放原有的指针并将 ptr5 指向一个新的 int 对象

另外,还可以使用 get 函数来获得 unique_ptr 管理的指针。

std::unique_ptr<int> ptr6(new int(42));
int* raw_ptr = ptr6.get(); // 获得指向 ptr6 管理对象的指针
适用场景

unique_ptr 适用于那些需要手动管理动态分配内存的场景。例如,在读取外部数据时,我们可能需要动态分配一块内存来存储数据。然而,一旦读取完成,这块内存就可以被直接释放了。这就是 unique_ptr 的用武之地。

总结

unique_ptr 是一种轻量级的智能指针,它拥有独立的所有权,并在它的生命周期结束时自动释放所管理的指针。它适用于手动管理动态分配内存的场景。