intCreateUser(constData& data,std::weak_ptr<CPlayer> player){if(player.expired()) {return-1; }std::shared_ptr<CPlayer> playerPtr = player.lock();if(playerPtr->GetSocket().expired()) {return-1; }if(!playerPtr->GetSocket().lock()->GetPlayer().expired()) { PBS2CCreateUserRes res...
std::weak_ptr可以作为std::shared_ptr的构造函数参数,但如果std::weak_ptr指向的对象已经被释放,那么std::shared_ptr的构造函数会抛出std::bad_weak_ptr异常。 std::shared_ptr<int>sp1(newint(22));std::weak_ptr<int> wp = sp1;// point to sp1std::shared_ptr<int>sp2(wp);std::cout<<sp2.us...
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;// 2if(!wp.expired()){std::shared_ptr<int>sp3=wp.lock();std::cout<<*sp3<<std::endl;// 22} 2.3 由std::weak_ptr构造std::...
// 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...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
#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 已...
std::weak_ptr<T>::expired boolexpired()constnoexcept; (C++11 起) 等价于use_count()==0。可能仍未对被管理对象调用析构函数,但此对象的析构已经临近(或可能已发生)。 参数 (无) 返回值 若被管理对象已被删除则为true,否则为false。 注意
弱引用智能指针 std::weak_ptr 可以看做是 shared_ptr 的助手,它不管理 shared_ptr 内部的指针。std::weak_ptr 没有重载操作符 * 和 ->,因为它不共享指针,不能操作资源,所以它的构造不会增加引用计数,析构也不会减少引用计数,它的主要作用就是作为一个旁观者监视 shared_ptr 中管理的资源是否存在。
#include <iostream> #include <memory> std::weak_ptr<int> gw; void f() { if (!gw.expired()) { std::cout << "gw is valid\n"; } else { std::cout << "gw is expired\n"; } } int main() { { auto sp = std::make_shared<int>(42); gw = sp; f(); } f(); } 输出...
expired() 判断当前 weak_ptr 指针为否过期(指针为空,或者指向的堆内存已经被释放)。 lock() 如果当前 weak_ptr 已经过期,则该函数会返回一个空的 shared_ptr 指针;反之,该函数返回一个和当前 weak_ptr 指向相同的 shared_ptr 指针。*/std::shared_ptr<SmartPointer> p = std::make_shared<SmartPointer>...