std::weak_ptr 的expired 成员函数用于检查该 weak_ptr 是否已经过期,即它所观察的对象是否已经被销毁。如果返回 true,则表示 weak_ptr 已经过期,不再指向有效的对象;如果返回 false,则表示 weak_ptr 仍然有效,可以安全地访问它所指向的对象(通过 lock 方法)。
wp.expired()){ std::shared_ptr<int> sp3 = wp.lock(); std::cout<<*sp3<<std::endl; // 22 } 2.3 由std::weak_ptr构造std::shared_ptr std::weak_ptr可以作为std::shared_ptr的构造函数参数,但如果std::weak_ptr指向的对象已经被释放,那么std::shared_ptr的构造函数会抛出std::bad_weak_ptr...
weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用计数的增加或减少。没有重载 *和 -> 但可以使用lock获得一个可用的shared_ptr对象 weak_ptr的使用更为复杂一点,它可以指向shared_ptr指针指向的对象内存,却并不...
4.lock() 如果expired()为true返回一个空shared_ptr,否则返回一个指向弱引用指针指向的对象的shared_ptr。 应用 笔者曾经写过一篇 Python 弱引用的文章,不久之后应该也会发出来。里面有一个弱引用相关的例子。这里就不再写了,写一下其他的。 首先就是弱引用可以防止shared_ptr之间的循环引用导致内存无法释放。
5)expired():判断当前 weak_ptr 指针为否过期(指针为空,或者指向的堆内存已经被释放)。 6)lock():如果当前 weak_ptr 已经过期,则该函数会返回一个空的 shared_ptr 指针;反之,该函数返回一个和当前 weak_ptr 指向相同的 shared_ptr 指针。 一、weak_ptr的作用 ...
使用lock() 获取 shared_ptr:要操作 weak_ptr 所观察的对象,可以使用 lock() 函数获取一个有效的 shared_ptr。如果原始的 shared_ptr 已经被释放,lock() 返回一个空的 shared_ptr。 判断是否有效:可以使用 expired() 函数来检查 weak_ptr 是否已经失效,即所观察的 shared_ptr 是否已经被释放。
// weak_ptr::expired example #include <iostream> #include <memory> int main () { std::shared_ptr<int> shared (new int(10)); std::weak_ptr<int> weak(shared); std::cout << "1. weak " << (weak.expired()?"is":"is not") << " expired\n"; shared.reset(); std::cout <<...
lock(); if (locked) { std::cout << "Value: " << *locked << std::endl; } else { std::cout << "Weak pointer is expired" << std::endl; } return 0; } 复制代码 在上面的示例中,weak是一个指向shared的weak_ptr。我们使用lock方法获取weak指向的shared对象的shared_ptr。如果weak已经失效...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
有效地返回expired() ? shared_ptr<T>() : shared_ptr<T>(*this),以原子方式执行. 您可以使用从其他线程weak_ptr::lock()获取a shared_ptr而无需进一步同步.这也证实了这里的升压和这个苏答案克里斯小丑,年轻. 同样,你必须确保不修改相同weak_ptr,而从另一个访问它从一个线程,所以传球g_w到f3()由价值...