// weak2 points to new data (5) if(auto tmp = weak2.lock()) cout << *tmp << '\n'; else cout << "weak2 is expired\n"; *///test4 循环引用,导致即使是智能指针也不能释放内存//用weak_ptr解决了循环引用,导致的内存不能释放的问题shared_ptr<teacher>tptr(new teacher);//计数器1sh...
weak_ptr可以通过shared_ptr构建以及赋值 shared_ptr<ClassA> spA(new ClassA); weak_ptr<ClassA> wpA1(spA); weak_ptr<ClassA> wpA2 = spA; 1. 2. 3. expired函数 weak_ptr并不增加shared_ptr的引用计数,因此有可能发生对象已经析构但是weak_ptr还在的情况,此时使用weak_ptr就必须小心,当对象即将发生...
//weak_ptr的创建voidfunc1(){//创建weak_ptr的时候,一般是用一个shared_ptr来初始化autopi = make_shared<int>(100);//shared_ptr//pi引用计数(强引用计数)不改变,但是弱引用计数会改变(弱引用计数会从0变成1)//强引用计数才能决定对象的声明期,弱引用计数对对象声明周期没有影响weak_ptr<int>piweak(pi...
std::cout <<"shared_ptr object(int) size = "<<sizeof(a) << std::endl; std::cout <<"shared_ptr object(char) size = "<<sizeof(b) << std::endl; std::weak_ptr<A> shadow_a; std::weak_ptr<B> shadow_b; { std::shared_ptr<A> ptr_a = std::make_shared<A>(); std::s...
int*ptr1=new(nothrow)int;//申请指向一个int类型的指针,如果失败,返回nullptr指针if(ptr1==nullptr){//申请失败进行处理cout<<"new false"<<endl;} 我们使用这种方式来进行内存申请,如果失败,则不抛出异常,会返回一个nullptr的指针,nothrow是标准库定义过的对象。
std::weak_ptr是 C++11标准库中引入的一种智能指针,用于解决与std::shared_ptr相关的循环引用问题。 当你使用std::shared_ptr来管理对象的生命周期时,两个或多个std::shared_ptr对象可能会形成一个循环引用,即它们互相持有对方的引用。这会导致引用计数永远不会达到零,从而导致内存泄漏,因为涉及的对象永远不会被...
weak的关键字用法如下: *在类型定义中:可以在类型定义中使用weak关键字,例如:typedefweak_ptr<SomeType>SomeTypeWeakPtr;。这将创建一个弱指针类型。 *在指针声明中:可以在指针声明时使用weak关键字,例如:SomeType*weakPtr=nullptr;。这将创建一个弱指针变量。 下面是一个使用weak关键字的示例: ```c #include<...
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr)。 不想看toy code的读者可以直接拉到文章最后看这部分的总结。 shared_ptr shared_ptr 基本用法 shared_ptr采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计...
查看weak_ptr的代码时发现,它主要有lock、swap、reset、expired、operator=、use_count几个函数,与shared_ptr相比多了lock、expired函数,但是却少了get函数,甚至连operator* 和 operator->都没有,可用的函数数量少的可怜,下面通过一些例子来了解一下weak_ptr的具体用法。
new XXX(shared_from_this()) 如果用强指针去接,则增加引用计数;弱引用去接,不增加引用计数。auto去接等同强指针。weak_ptr 传给thread、timer回调,不能使用expired()判断 new XXX(shared_from_this()) 如果用强指针去接,则增加引用计数;弱引用去接,不增加引用计数。auto去接等同强指针。