{std::weak_ptr<CTCPClientSocket> socket = player.lock()->GetSocket();std::weak_ptr<CPlayer> newPlayer = socket.lock()->GetPlayer();if(newPlayer.expired()) { newPlayer = PlayerManager::GetInstance().CreatePlayer(playerData.playerid(), socket);if(newPlayer.expired()) {return-1; } ne...
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...
The member function returns true if *this has expired, otherwise false.ExampleCopy // 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::tr1::weak_ptr<...
1. use_count():获取当前控制块中资源的强引用计数。 2. expired():判断所观测的资源是否失效(即己经被释放),即use_count是否为0。 (1)shared_ptr<int> sp1 = wp.lock();//如果wp失效,则sp为空(其中wp为weak_ptr类型) (2)shared_ptr<int> sp2(wp); //如果wp失效,则抛std::bad_weak_ptr异常。
// 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> wp; { std::shared_ptr<int> sp(new int(10)); wp = sp; std::cout << "wp...
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;// ...
演示如何用 expired 检查指针的有效性。 运行此代码 #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 = ...
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_...
#include <iostream>#include <memory>std::weak_ptr<int>gw;voidf(){if(!gw.expired()){std::cout<<"gw is valid\n";}else{std::cout<<"gw is expired\n";}}intmain(){{autosp=std::make_shared<int>(42);gw=sp;f();}f();} ...
查看weak_ptr的代码时发现,它主要有lock、swap、reset、expired、operator=、use_count几个函数,与shared_ptr相比多了lock、expired函数,但是却少了get函数,甚至连operator*和operator->都没有,可用的函数数量少的可怜,下面通过一些例子来了解一下weak_ptr的具体用法。