std::weak_ptr可以作为std::shared_ptr的构造函数参数,但如果std::weak_ptr指向的对象已经被释放,那么std::shared_ptr的构造函数会抛出std::bad_weak_ptr异常。 std::shared_ptr<int>sp1(newint(22));std::weak_ptr<int> wp = sp1;// point to sp1std::shared_ptr<int>sp2(wp);std::cout<<sp2.us...
该类继承于__shared_ptr,构造函数也只是调用了__shared_ptr的构造函数而已,将接管的普通指针传递给__shared_ptr 该类没有重载*和->运算符,从这点看shared_ptr似乎无法实现普通指针的功能,推测这两个运算符的重载是在父类__shared_ptr实现的 该类没有析构函数,从智能指针最终会自动释放内存的特性来看,释放工作...
int *ptr = new int(10); int *ref = ptr; delete ptr; //此时ref就变成了悬空指针 //有了智能指针之后,我们可以这样用: shared_ptr<int> sptr(new int(10)); //shared初始化 weak_ptr<int> wptr1 = sptr; //与shared_ptr指向同一对象 sptr.reset(new int(20)); //shared_ptr指向新的对象...
operator=() 重载 = 赋值运算符,是的 weak_ptr 指针可以直接被 weak_ptr 或者 shared_ptr 类型指针赋值。 swap(x) 其中 x 表示一个同类型的 weak_ptr 类型指针,该函数可以互换 2 个同类型 weak_ptr 指针的内容。 reset() 将当前 weak_ptr 指针置为空指针。
智能指针std::weak_ptr std::weak_ptr是 C++ 标准库中的一种智能指针,它设计用来解决std::shared_ptr智能指针可能造成的循环引用问题。std::weak_ptr持有对对象的非拥有(弱)引用,这意味着它不会增加对象的引用计数,而且不会影响对象的生命周期。 这里对std::weak_ptr做个笔记梳理,如下图展示当我们创建一个智...
weak_ptr这个指针天生一副“小弟”的模样,也是在C++11的时候引入的标准库,它的出现完全是为了弥补它老大shared_ptr天生有缺陷的问题,其实相比于上一代的智能指针auto_ptr来说,新进老大shared_ptr可以说近乎完美,但是通过引用计数实现的它,虽然解决了指针独占的问题,但也引来了引用成环的问题,这种问题靠它自己是没办...
weak_ptr的产生,主要是为了配合shared_ptr的使用,对于shared_ptr来说,有一种循环引用会导致shared_ptr的引用计数一直不能变为0,如此以来导致内存一直不能释放的掉。例子可以参考下面例子: 代码语言:javascript 代码运行次数:0 代码运行 #include<iostream>#include<memory>#include<vector>using namespace std;classCla...
weak_ptr 是为了配合 shared_ptr 而引入的一种智能指针,它指向一个由 shared_ptr 管理的对象而不影响所指对象的生命周期,也就是将一个 weak_ptr 绑定到一个 shared_ptr 不会改变 shared_ptr 的引用计数。 不论是否有 weak_ptr 指向,一旦最后一个指向对象的 shared_ptr 被销毁,对象就会被释放。 从这个角度看...
weak_ptr是一种弱引用,它可以指向shared_ptr所管理的对象,但不会增加引用计数。当所有指向该对象的shared_ptr都被释放后,weak_ptr就会自动失效。因此,weak_ptr不会导致循环引用,从而解决了内存泄漏的问题。 使用weak_ptr需要借助于shared_ptr。通过将shared_ptr转换为weak_ptr,可以创建一个弱引用指向共享对象。可以...