weak_ptr<T> w; //定义一个空的weak_ptr
weak_ptr<T> w(sp); //定义一个weak_ptr并与shared_ptr绑定 这个操作不会增加计数器
w=p; //给weak_ptr赋值 此操作不会增加p的计数器
w.reset(); //将 weak_ptr置空
w.use_count(); // 获取与weak_ptr绑定的共享指针的 计数器的值
w.expired(); //判断weak_ptr绑定的对象是否还有效 有效返回true 无效返回false
w.lock(); // 如果expierd为true即绑定的 shared_ptr还有效就返回这个共享对象的shared_ptr。反之返回空指针
一段代码:
auto p = make_shared<int>(42);
weak_ptr<int> wp = p;
if(shared_ptr<int> np = wp.lock()){ //如果绑定的shared_Ptr还有效 进入if
//在if中 np与p共享对象
}
上述代码 让我想起了遗忘多年的 if判断语句 也反映出来 多年的无所谓的学习心态说导致的严重后果。
if(a=b);
if(a+b);
练习12.19:定义你自己版本的StrBlobptr,更新StrBlob类,加入恰当的friend声明及begin和end成员。