- weak_ptr指向一个shared_ptr指向的对象,且不会改变对象的引用计数。
- weak_ptr不控制所指对象的生命周期。
- if (a = x)只要x不为0,那么这个if就为真,比如下面的结果打印为 22
int main() { if (int a = 0) { std::cout << "===11===" << std::endl; } if (int a = 1) { std::cout << "===22===" << std::endl; } }
- weak_ptr的简单示例
- 检查所指对象是否还活着
当a,b两个指针指向同一个对象object,当线程A删除了(delete )这个object, 而线程B通过b去访问同一个对象,这个时候称b指针为空悬指针,而一般可以weak_ptr用来查看自己指向的(shared_ptr的对象)是否还可以使用。如果对象没有被delte,lock()会返回shared_ptr<int> 指针。如果对象被销毁了,会返回空指针。
#include <deque> #include <iostream> #include <mutex> #include <thread> int main() { std::weak_ptr<int> wp; std::cout << "======" << wp.lock() << std::endl; // wp默认为空指针 { std::shared_ptr<int> p = std::make_shared<int>(12); wp = p; // weak_ptr指向一个shared_ptr if (std::shared_ptr<int> ptr = wp.lock()) { // wp.lock()如果对象还存在,返回wp指向的shared_ptr std::cout << p.get() << "======" << wp.lock() << std::endl; } } std::cout << "======" << wp.lock() << std::endl; // wp.lock()如果对象不存在,返回空指针 }