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 指针置为空指针。
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...
智能指针std::weak_ptr std::weak_ptr是 C++ 标准库中的一种智能指针,它设计用来解决std::shared_ptr智能指针可能造成的循环引用问题。std::weak_ptr持有对对象的非拥有(弱)引用,这意味着它不会增加对象的引用计数,而且不会影响对象的生命周期。 这里对std::weak_ptr做个笔记梳理,如下图展示当我们创建一个智...
同时,weak_ptr<T> 模板类中没有重载 * 和 -> 运算符,这也就意味着,weak_ptr 类型指针只能访问所指的堆内存,而无法修改它。 一、weak_ptr的作用 weak_ptr主要针对shared_ptr的空悬指针和循环引用问题而提出: (1)空悬指针问题:有两个指针p1和p2,指向堆上的同一个对象Object,p1和p2位于不同的线程中。假设...
C++的智能指针是一种特殊的指针类型,它能够自动管理内存资源,避免常见的内存泄漏和多次释放等问题。C++11引入了三种主要的智能指针:unique_ptr、shared_ptr和weak_ptr。 ①unique_ptr 在C++中,unique_ptr是一个智能指针(smart pointer)类模板,用于管理动态分配的内存资源,它提供了自动释放内存的功能。与原始指针相比,...