unique_ptr的功能基本和shared_ptr相同,也是用于管理堆内存的智能指针,但是不允许多个unique_ptr指向同一个对象。 2.2 unique_ptr使用方法 初始化 std::unique_ptr<Z> up1; std::unique_ptr<Z> up2(nullptr); std::unique_ptr<Z> up1(new Z(1)); std::unique_ptr<Z> up2(up1); // 错误,不能使...
unique_ptr<int> pInt2 = std::move(pInt); // 转移所有权 //4、函数返回unique_ptr unique_ptr不支持拷贝操作,但却有一个例外:可以从函数中返回一个unique_ptr。 unique_ptr<int> clone(int p) { unique_ptr<int> pInt(new int(p)); return pInt; // 返回unique_ptr } //5、在容器中保存指针 ...
#include<memory>voidmanageResource(std::unique_ptr<int>ptr){// 使用资源}// ptr在此处自动销毁,资源被释放intmain(){autoptr=std::make_unique<int>(42);// 创建并初始化unique_ptrmanageResource(std::move(ptr));// 移动所有权到函数内// ptr现在为空,资源已在manageResource内部被释放return0;} s...
unique_ptr,shared_ptr和数组①unique_ptr没有重载operator*()所以,要使用unique_ptr指向的数组的话,就只能使用operator[]来访问数组元素了,如图:#include <iostream> #include<memory> using namespace std; int main() { // shared_ptr<int[]> ps(new int[1000]);由于默认是delete,所以禁止new [] unique...
是C++11引入的独占所有权的智能指针,它确保在其生命周期结束时自动释放所管理的对象内存。具有所有权的`unique_ptr`对象只能指向一个特定的对象,不能共享所有权。 是一个共享所有权的智能指针,它允许多个指针指向同一对象,并且在最后一个引用被销毁时自动释放所管理的对象内存。
1.unique_ptr特点 unique_ptr 是 C++ 11 提供的用于防止内存泄漏的智能指针中的一种实现,独享被管理对象指针所有权的智能指针。 unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中删除关联的原始指针。 unique_ptr具有->和*运算符重载符,因此它可以像普通指针一样使用。
std::unique_ptr unique_ptr代表着这个指针是一块内存资源的唯一拥有者。unique_ptr维护一个指针,并在其析构函数中释放该指针。 unique_ptr的一大优点能够在语义上表达一定的意义和意图。就比如下面这个代码: std::unique_ptr<House>buildAHouse(); 返回值的类型是一个std::unique_ptr,这其实就是在告诉你该函数...
unique_ptr只保存了类型指针 ptr 和这个指针的析构方法,调用 delete ptr,就需要ptr的完整类型,为了防止这个问题出现,直接通过 assert sizeof 排除掉了这种风险。unique_ptr相当于在编译时绑定了删除器。 shared_ptr保存的是一个控制块的指针。控制块包含的就是一个引用计数和一个原来对象的裸指针。控制块中初始化...
std::shared_ptr<int>p(new int(2)); int *q=p.get();//q为一个内置指针,指向和p同一个对象,注意不要delete q 1. 2. 💥智能指针—unique_ptr 和shared_ptr不同,unique_ptr拥有它所有的唯一对象,这样就保证unique_ptr被销毁时,其对象也会被销毁。
对比shared_ptr的头文件,拷贝构造函数和=操作符重载函数是delete.这也就说明unique_ptr中不能进行直接拷贝和赋值操作。 代码语言:javascript 代码运行次数:0 复制Cloud Studio 代码运行 UniquePointer(const UniquePointer&) = delete; UniquePointer& operator=(const UniquePointer&) = delete; 构造函数 代码语言:java...