C++ weak_ptr

  • 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 指针。如果对象被销毁了,会返回空指针。

​

#include 
#include 
#include 
#include 

int main() {
    std::weak_ptr wp;
    std::cout << "======" << wp.lock() << std::endl;  // wp默认为空指针
    {
        std::shared_ptr p = std::make_shared(12);
        wp = p;                                      // weak_ptr指向一个shared_ptr
        if (std::shared_ptr ptr = wp.lock()) {  // wp.lock()如果对象还存在,返回wp指向的shared_ptr
            std::cout << p.get() << "======" << wp.lock() << std::endl;
        }
    }
    std::cout << "======" << wp.lock() << std::endl;  // wp.lock()如果对象不存在,返回空指针
}

​
  •  

你可能感兴趣的:(C/C++,c++)