Shared_ptr &operator=(Shared_ptr &&rhs) { Shared_ptr{std::move(rhs)}.swap(*this);return*this; }voidreset()noexcept{ Shared_ptr{}.swap(*this); }voidreset(nullptr_t)noexcept{reset(); }voidreset(T *ptr){ Shared_ptr{ptr}.swap(*this); }voidswap(Shared_ptr &rhs)noexcept{ std::swap...
shared_ptr可以使用一个new表达式返回的指针进行初始化;但是,不能将一个new表达式返回的指针赋值给shared_ptr。一旦将一个new表达式返回的指针交由shared_ptr管理之后,就不要再通过普通指针访问这块内存。shared_ptr可以通过reset方法重置指向另一个对象,此时原对象的引用计数减一。可以定制一个deleter函数,用于在shared_...
shared_ptr<Test> stp(tp, my_deleter); shared_ptr<Test> stp1(stp); cout << stp.use_count() << endl; Test* tp1 = new Test(2); stp1.reset(tp1, my_deleter); *///test3 不要混用普通指针和智能指针/* shared_ptr<int> p(new int(42));//计数器为1 pro(p);//p作为参数会进行co...
1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr是通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset(...
shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 make_shared的标准库函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。与智能指针一样,ma...
1、如果你真的需要使用独有的资源(对象),使用shared_ptr而不是unique_ptr会使你的代码容易出现资源泄露和一些bug。 不易察觉的bug:有没有想过这种情况,如果有其他程序员无意间通过赋值给另一个共享指针而修改了你共享出来的资源/对象,而你却从没有预料到这种事情!
Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference 被销毁” 时被释放。为了在结构较复杂的情景中执行上述工作,标准库提供 weak_ptr、bad_weak_ptr 和 enable_shared_from_this 等辅助类。 Class unique_ptr 实现独占式拥有(exclusive...
reset():重置智能指针,使它所持有的资源为空。 swap():交换两个智能指针所管理的资源。 use_count():返回智能指针所指向变量的被引用数量。 unique():检查所指向的变量是否仅由当前shared_ptr的实例管理。 用法说明: shared_ptr允许多个指针指向同一块堆内存。
reset 放弃内部对象的所有权或拥有对象的变更, 会引起原有对象的引用计数的减少 get 返回内部对象(指针), 由于已经重载了()方法, 因此和直接使用对象是一样的.如shared_ptr sp(new int(1)); sp 与 sp.get()是等价的 weak_ptr weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理...
Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference 被销毁” 时被释放。为了在结构较复杂的情景中执行上述工作,标准库提供 weak_ptr、bad_weak_ptr 和 enable_shared_from_this 等辅助类。 Class unique_ptr 实现独占式拥有(exclusive...