unique_ptr<A> ptr2 = ptr1; 但是,unique_ptr可以使用新的语义,即使用std :: move()函数将包含的指针的所有权转移到另一个unique_ptr。 // Works, resource now stored in ptr2 unique_ptr<A> ptr2 = move(ptr1); 所以,最好使用unique_ptr,当我们想要一个指向一个对象
#include<memory>intmain(){// 创建一个unique_ptr,指向一个动态分配的int对象std::unique_ptr<int>ptr(newint(42));// 使用指针操作符和解引用操作符访问所指向对象的值std::cout<<*ptr<<std::endl;// 输出: 42// 通过移动构造函数将所有权转移给另一个unique_ptrstd::unique_ptr<int>ptr2=std::m...
但,有的时候需要多个地方使用、保存一个指针所绑定的资源,这时只有一个unique_ptr就不够用了。这时就应该shared_ptr出场了,当用一个shared_ptr指针A指向一个资源时R,这个shared_ptr指针A的内部计数器为1,当有其他shared_ptr指针B通过A也指向R时,shared_ptr指针A的内部计数器增加1变为2,shared_ptr指针B的内部计...
std::unique_ptr<int> p3 = std::make_unique<int>(30); // std::unique_ptr<int> p4 = p3; // 错误,不可复制 std::unique_ptr<int> p4 = std::move(p3); // 正确:所有权转移 1. 2. 3. 4. 3.3 自动释放资源 当unique_ptr离开作用域时,它会自动调用delete释放所管理的对象,避免内存泄漏。
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
一、share_ptr share_ptr是C++11新添加的智能指针,它限定的资源可以被多个指针共享。 只有指向动态分配的对象的指针才能交给 shared_ptr 对象托管。将指向普通局部变量、全局变量的指针交给 shared_ptr 托管,编…
创建unique_ptr指针,且明确指向 1std::unique_ptr<int> u_p3(newint); 创建空unique_ptr指针,且明确指向已经存在的unique_ptr指针内存 1std::unique_ptr<int> u_p4(newint);2std::unique_ptr<int> u_p5(std::move(u_p4));//调用移动构造函数3//u_p5 将获取 u_p4 所指堆空间的所有权,而 u_p4 ...
C++——智能指针auto_ptr、unique_ptr、share_ptr、weak_ptr 技术标签: C++auto_ptr 相对于普通指针分配内存,需要自己new and delete,若不delete,就会造成内存泄露。auto_ptr智能指针可以做到,指针失效时自动回收内存空间。该指针可以进行复制构造与赋值构造,所以可能造成两个(或多个)指针指向同一内存空间的情况,导致...
unique_ptr作为独享所有权的智能指针,提供对单一资源的严格所有权管理。相较于传统的auto_ptr,unique_ptr在内存管理方面更安全,有效防范内存泄漏。它通过管理关联的原始指针来确保资源的生命周期与智能指针一致,且即使在异常抛出或函数退出时,unique_ptr的析构函数也会被调用,确保原始指针被安全释放。
的unique_ptr 独占所指向的对象 的weak_ptr shared_ptr的的弱引用 shared_ptr描述(在内存中): shared_ptr是一个标准的共享所有权的智能指针,就是允许多个指针指向同一对象,shared_ptr对象中不仅有一个指针指向某某(比如 int型,以下也拿int类型举例)对象,还拥有一个引用计数器,代表一共有多少指针指向了那个对象。