📅  最后修改于: 2023-12-03 14:48:11.058000             🧑  作者: Mango
unique_ptr
是 C++11 中的一个智能指针,用于管理动态分配的内存。与 shared_ptr
不同,一个对象只能有一个 unique_ptr
拥有它。当 unique_ptr
被销毁时,它所指向的对象也会被销毁。
创建一个 unique_ptr
对象可以通过三种方式:
std::make_unique
函数创建#include <memory>
std::unique_ptr<int> ptr1 = std::make_unique<int>(42);
new
运算符创建std::unique_ptr<int> ptr2(new int(42));
int* ptr3 = new int(42);
std::unique_ptr<int> ptr4(ptr3);
由于 unique_ptr
管理的是动态分配的内存,所以我们可以使用 reset
和 release
函数来管理指针指向的对象。
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
是一种轻量级的智能指针,它拥有独立的所有权,并在它的生命周期结束时自动释放所管理的指针。它适用于手动管理动态分配内存的场景。