关于这两个smart_ptr,网上search一把都能够找到一大堆使用介绍,
但欠缺的是对源码的分析,
的确,boost的代码不好看懂,scoped_ptr还好,比较简单,依赖也少,
但如果看shared_ptr和weak_ptr就麻烦了,里面的东西本来就多,还依赖的很(weak_ptr本来就依赖shared_ptr)。
重要的是,我对weak_ptr非常感兴趣,
《超越C++标准库:Boost库导引》对他的应用总结如下:
对于以下情形使用 weak_ptr :
-
要打破递归的依赖关系
-
使用一个共享的资源而不需要共享所有权
-
避免悬空的指针
前两点还好理解,但最后一点,weak_ptr是如何做到避免悬空指针(野指针)的?
既然网上没有介绍,只好看代码了,毕竟代码骗不了人。
但boost的代码那个难看明白啊,泛型编程的东西确实够磨人的,
反正我是问个究竟,所以能跳过的就跳过,只找重心,看了一晚后大概看明白了。
下面简单说说:
1 weak_ptr和shared_ptr是相关的,因为weak_ptr共享了shared_ptr的共享成员指针。
2 这个共享的成员指针,包括了两个整数,一个是use_count_,一个是weak_count_,区别对待。
3 既然一份指针带着两个整数,那任一个整数归零了,指针当然还能够判断出来的(weak_ptr能操作这个共享成员指针,而判断shared_ptr是否引用归零了,判断use_cout_就足够了,这不是难事。)。
相关的代码后面再补充说明吧,但还是建议看代码更好。