std::shared_ptr<int> sPtr(new int(5)); std::weak_ptr<int> wPtr = sPtr; //weak_ptr不会改变shared_ptr,但是会和shared_ptr的引用保持一致 std::shared_ptr<int> sPtr2 = wPtr.lock(); //wPtr.lock()后会改变shared_ptr的引用计数(+1)...
Unique_ptr &operator=(Unique_ptr &&rhx)noexcept{this->reset(rhx.release());return*this; }T *release()noexcept{returnstd::exchange(ptr_,nullptr);//返回当前指针指向地址,并置当前指针为空}T *get()constnoexcept{returnptr_; }voidreset(T *ptr)noexcept{deletestd::exchange(ptr_, ptr);//释放当...
#include<iostream>#include<memory>intmain(){structC{int a=1;int b=2;};std::shared_ptr<C>p1(newC);std::unique_ptr<int>p2(newint(40));std::shared_ptr<int>p3=std::make_shared<int>(15);std::unique_ptr<int>p4=std::make_unique<int>(10);std::weak_ptr<int>p5=p3;std::cout<<...
请注意使用 malloc 和free (相关的动态内存 API)在内存泄漏和异常方面具有很多缺陷。若要完全避免这些泄漏和异常问题,请使用 C++ 标准模板库 (STL) 提供的结构。这些包括shared_ptr,unique_ptr, 和vector有关更多信息,请参见智能指针(现代 C++)和C++ 标准库参考。
1、unique_ptr 一个unique_ptr拥有它指向的对象的独占所有权,并且会在指针超出范围时销毁该对象。unique_ptr明确地阻止复制其包含的指针。不过可以使用std::move函数必须用于将包含的指针的所有权转移给另一个unique_ptr。示例代码 2、shared_ptr 引用计数的智能指针。当您想要将一个原始指针分配给多个所有者时使用...
(1)为什么使用std::shared_ptr而不是std::unique_ptr? std::unique_ptr是独占所有权的智能指针,意味着同一时间只能有一个std::unique_ptr指向同一个对象。这不适合缓存场景,因为缓存需要多个引用同时访问同一个对象。 std::shared_ptr允许多个智能指针共享同一个对象的所有权,通过引用计数来管理对象的生命周期。
值得一提的是,和 unique_ptr、weak_ptr 不同之处在于,多个 shared_ptr 智能指针可以共同使用同一块堆内存。并且,由于该类型智能指针在实现上采用的是引用计数机制,即便有一个 shared_ptr 指针放弃了堆内存的“使用权”(引用计数减 1),也不会影响其他指向同一堆内存的 shared_ptr 指针(只有引用计数为 0 时,堆...
深入学习c++--智能指针(一) shared_ptr,1.几种智能指针1.auto_ptr:c++11中推荐不使用他(放弃)2. shared_ptr: 拥有共享对象所有权语义的智能指针3. unique_ptr: 拥有独有对象所有权语义的智能指针4. weaked_ptr: 到 std::shared_ptr 所管理对象的弱引用1.1
C++中四种常见的指针:unique_ptr,shared_ptr,weak_ptr,以及C++中已经废弃的auto_ptr。 下面我们根据对象所有权以及对象生命周期分别对这4类进行讲解: 1.auto_ptr auto_ptr要求同时只能有一个指针指向同一个对象,如果有另外一个指针引用了对象,则当前指针引用会被强制抹除置为null_ptr。 模型如下: 案例分析: ``...
27、四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr28、shared_ptr中的循环引用怎么解决?(weak_ptr)29、vector与list比较30、vector迭代器失效的情况31、map与unordered_map对比32、set与unordered_set对比33、STL容器空间配置器 参考书籍:《C++ Primer》(第5版)、《STL源码剖析》、《深度探索...