weak_ptr
weak_ptr会指向一个share_ptr(使用一个share_ptr来初始化weak_ptr),但并不会增加这个share_ptr的引用计数器,其析构也不会减少share_ptr的引用计数器。
构造函数及使用
#include <iostream>
#include <memory>
#include <string>
#include "StrBlob.h"
#include <stdio.h>int main()
{auto sp = std::make_shared<std::string>("Share");//////////////// 构造函数// 使用shared_ptr来初始化weak_ptr 但要保证sp指向的类型可以转换为std::stringstd::weak_ptr<std::string> wp1(sp);// 也可直接赋值 同样要保证sp指向的类型可以转换为std::stringstd::weak_ptr<std::string> wp2 = sp;// sp的引用计数器仍然为1std::cout << sp.use_count() << std::endl;////////////////// 使用// weak_ptr使用时 要通过lock函数来获取share_ptr 才能正常使用所指向的对象std::shared_ptr<std::string> spLock = wp1.lock();if (spLock) { // 要判断该share_ptr是否还有效std::cout << *spLock << std::endl;}return 0;
}