std::unique_ptr称为独享智能指针,它独占某个对象管理的所有权,与shared_ptr可以同时有多个共享智能指针拥有某个对象管理的所有权不同。当unique_ptr销毁或者reset,就会释放(析构)被管理的对象了。既然是独占,那么就不能有多个unique_ptr指向同一个对象,unique_ptr也就不能支持复制操作。
unique_ptr<AA> pu_1(new AA("亚瑟1")); unique_ptr<AA> pu_2(pu_1.release()); // 将pu_1管理指针转移给pu_2 std::move()可以转移对原始指针的控制权。(可用于把unique_ptr传递给子函数,子函数形参也是unique_ptr)void fun4(unique_ptr<AA> pu) { cout << pu->m_name << endl; } void...
//放弃对指针的控制权,切断了智能指针和其所指对象之间的联系,返回裸指针,将智能指针置空,//返回在这个裸指针可以手动delete,也可以用来初始化另一个智能指针unique_ptr p1(newint(10)); unique_ptr p2(p1.release());//注意:release()返回的裸指针所指的内存,如果没有被其他智能指针指向,则需要自己手动dele...
~unique_ptr(){auto&__ptr=std::get<0>(_M_t);if(__ptr!=nullptr)get_deleter()(__ptr);__ptr=pointer();} 在析构时,释放持有的指针。 3. 符号重载 = 重载 unique_ptr&operator=(unique_ptr&&__u)noexcept{reset(__u.release());get_deleter()=std::forward<deleter_type>(__u.get_delete...
与shared_ptr的不同之处: shared_ptr所指向的对象可以有多个其他shared_ptr智能指针 而unique_ptr所指向的对象只能有一个unique_ptr指针,也就是自己。当unique_ptr被销毁时,它所指向的对象也被销毁 二、unique_ptr类的初始化 unique_ptr指针需要绑定到一个new返回的指针上,并且不能直接将new的结果用赋值运算符“...
智能指针让我们可以在栈上通过指针使用分配在堆上的资源,而且确保能够在出当前作用域时,堆上的资源被自动释放。 unique_ptr 、 shared_ptr 和 weak_ptr std::unique_ptr unique_ptr代表着这个指针是一块内存资源的唯一拥有者。unique_ptr维护一个指针,并在其析构函数中释放该指针。
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
C++的智能指针是一种特殊的指针类型,它能够自动管理内存资源,避免常见的内存泄漏和多次释放等问题。C++11引入了三种主要的智能指针:unique_ptr、shared_ptr和weak_ptr。 ①unique_ptr 在C++中,unique_ptr是一个智能指针(smart pointer)类模板,用于管理动态分配的内存资源,它提供了自动释放内存的功能。与原始指针相比,...
在(一)我们研究了unique_ptr, 它可以用来指向一个原生指针,这样就不用操心原生指针所指资源的释放问题了。但,有的时候需要多个地方使用、保存一个指针所绑定的资源,这时只有一个unique_ptr就不够用了。这时就应该shared_ptr出场了,当用一个shared_ptr指针A指向一个资源时R,这个shared_ptr指针A的内部计数器为1,当...
unique_ptr的三种创建方式 通过已有裸指针创建 通过new创建 通过std::make_unique创建(推荐) unique_ptr可以通过get()获取地址 unique_ptr实现了->与* 即可以通过->调用成员函数 可以通过* 调用解引用 unique_ptr创建 cat.h #ifndefCAT_H#defineCAT_H#include<string>#include<iostream>usingnamespacestd;classCat...