std::weak_ptr 的expired 成员函数用于检查该 weak_ptr 是否已经过期,即它所观察的对象是否已经被销毁。如果返回 true,则表示 weak_ptr 已经过期,不再指向有效的对象;如果返回 false,则表示 weak_ptr 仍然有效,可以安全地访问它所指向的对象(通过 lock 方法)。
expired():判断当前weak_ptr指针为否过期(指针为空,或者指向的堆内存已经被释放)。 lock():如果当前weak_ptr已经过期,则该函数会返回一个空的shared_ptr指针;反之,该函数返回一个和当前weak_ptr指向相同的shared_ptr指针。 示例程序 #include<iostream>#include<memory>voidobserve(std::weak_ptr<int> weak){if...
bool expired() const; 备注成员函数返回 true,如果 *this 过期,否则 false。示例复制 // std_tr1__memory__weak_ptr_expired.cpp // compile with: /EHsc #include <memory> #include <iostream> struct deleter { void operator()(int *p) { delete p; } }; int main() { std::weak_ptr<int>...
weak_ptr提供了一个成员函数expired()来判断所指对象是否已经被释放。如果所指对象已经被释放,expired()返回true,否则返回false。 程序示例: std::shared_ptr<int>sp1(newint(22));std::shared_ptr<int> sp2 = sp1;std::weak_ptr<int> wp = sp1;// point to sp1std::cout<<wp.use_count()<<std::en...
expired函数 获取指针 cyclic reference例子 概述 shared_ptr的作用主要是在最后一个指向资源的shared_ptr销毁时自动释放资源,然而在某些场景下这种行为可能不被期望。例如: 两个或者多个对象都使用shared_ptr,并且相互通过shared_ptr指向对方,如果存在一个环路(cyclic reference),那么由于环路上的shared_ptr的use_count最...
#include <iostream> #include <memory> std::weak_ptr<int> gw; void f() { if (!gw.expired()) std::cout << "gw 有效\n"; else std::cout << "gw 已过期\n"; } int main() { { auto sp = std::make_shared<int>(42); gw = sp; f(); } f(); } 输出: gw 有效 gw 已...
weak_ptr提供了一个成员函数expired()来判断所指对象是否已经被释放。如果所指对象已经被释放,expired()返回true,否则返回false。 程序示例: std::shared_ptr<int>sp1(newint(22));std::shared_ptr<int>sp2=sp1;std::weak_ptr<int>wp=sp1;// point to sp1std::cout<<wp.use_count()<<std::endl;// ...
std::weak_ptr 没有重载操作符 * 和 ->,因为它不共享指针,不能操作资源,所以它的构造不会增加引用计数,析构也不会减少引用计数,它的主要作用就是作为一个旁观者监视 shared_ptr 中管理的资源是否存在。 初始化 // 默认构造函数 constexpr weak_ptr() noexcept; ...
模型和shred_ptr的模型几乎一样。 方法 和shared_ptr有所不同,这里也找出几个表常用的列出。 1.reset() 弱引用的reset()没有多态。 作用是把弱引用置空。 2.use_count() 这个方法返回与弱引用指针共享对象的shared_ptr的数量。 3.expired() 如果use_count()已经为 0 那么返回true,否则返回false ...
1.使用weak_ptr的成员函数use_count()可以观测资源的引用计数,另一个成员函数expired()的功能等价于use_count()==0,但更快,表示被观测的资源(也就是shared_ptr的管理的资源)已经不复存在。2.weak_ptr可以使用一个非常重要的成员函数lock()从被观测的shared_ptr获得一个可用的shared_ptr对象, ...