weak_ptr::expired判断shared_ptr是否有效,即shared_ptr内部数据是否被释放 weak_ptr是否可以监看shared_ptr中的内部数据呢?因为weak_ptr是弱指针,所以不能直接访问,但是可以通过weak_ptr::lock间接访问。 weak_ptr::lock weak_ptr::lock返回构造weak_ptr的shared_ptr,当shared_ptr已经被释放时,返回的是空shared_...
weak_ptr也是一个模板,只提供能接受一个shared_ptr的构造函数或者另一个weak_ptr的赋值,也就是说不能直接用它定义一个智能指针对象,它是为了搭配shared_ptr使用的,weak_ptr提供lock、swap、reset、expired、operator=、use_count等函数,相对shared_ptr多了lock、expired函数,却少了get函数,也不支持operator* 和 ope...
此函数和 std::shared_ptr 的构造函数可能获得 std::weak_ptr 所指向的被管理对象的临时所有权。区别是 std::shared_ptr 的构造函数在其 std::weak_ptr 为空时抛异常,而 std::weak_ptr<T>::lock() 构造空的 std::shared_ptr<T> 。 示例代码 #include <iostream> #include <memory> void observe(std...
static_pointer_cast Function swap Function weak_ptr Class weak_ptr Class weak_ptr::element_type weak_ptr::expired weak_ptr::lock weak_ptr::operator= weak_ptr::reset weak_ptr::swap weak_ptr::use_count weak_ptr::weak_ptr _DO_NOT_DECLARE_INTERLOCKED_INTRINSICS_IN_MEMORY MacroLearn...
std::shared_ptr<Widget> spw1 = wpw.lock();//如果wpw已经失效了,spw1是nullautospw2 = wpw.lock();//和上面一样,不过用的是auto 另一种形式是参数为std::weak_ptr的std::shared_ptr的构造函数。这样情况下,如果std::weak_ptr已经失效了,会有一个异常抛出: ...
{if(!obj.expired()) { obj.lock()->Delete(); obj.reset(); } } 开发者ID:JCGit,项目名称:Galaxy3D,代码行数:8,代码来源:GameObject.cpp 示例8: exit ▲点赞 1▼ Dispatcher::Dispatcher(conststd::weak_ptr<Manager>& manager){ LOG_ENTER_FUNC("constructor");if(manager.expired()){exit(1);...
voidConnection::handleWriteTimeout(std::weak_ptr<Connection> weak,constboost::system::error_code& error) {if(error == boost::asio::error::operation_aborted || weak.expired())return;if(std::shared_ptr<Connection> connection = weak.lock()) ...
shared_ptr<Ty> lock() const; RemarksThe member function returns an empty shared_ptr object if *this has expired; otherwise it returns a shared_ptr Class<Ty> object that owns the resource that *this points to.Example复制 // std_tr1__memory__weak_ptr_lock.cpp // compile with: /EHsc ...
【C++11新特性】 C++11智能指针之shared_ptr 1、为什么需要weak_ptr? 在正式介绍weak_ptr之前,我们先来回忆一下shared_ptr的一些知识。 我们知道shared_ptr是采用引用计数的智能指针,多个shared_ptr实例可以指向同一个动态对象,并维护了一个共享的引用计数器。
locked = wp.lock(); if (locked) { std::cout << "Value: " << *locked << std::endl; } else { std::cout << "Pointer expired" << std::endl; } return 0; } 输出结果为: Value: 42 Pointer expired 在第一个lock()调用后,可以正常访问weak_ptr所管理的shared_ptr对象,因为它还没有过...