实习了一个半月了,实习的日子过得真快.亮哥十分照顾,各种指点,还不单单是技术方面的,这就是传说中良师益友啊.实习一下,感觉视野开阔了一些,以前做的感觉都是像小孩子玩具一样,自娱自乐,现在回头去看感觉也挺水的-____-.
现在基本写代码都是vim了,IDE感觉都是浮云.GDB调试渐入佳境.但是还是没有win下的调试器方便,gdbtui还好,但是始终不及OD的水平.调试的时候还是方便一点的好啊.linux下开发自我感觉算是入了门吧.(好吧,还是菜鸟级别)
标准库第二版刚好看到智能指针,所以这两天抽空看看4.7.0库里shared_ptr和weak_ptr的实现,循惯例,上图先
首先是shared_ptr:
接下来是weak_ptr:
智能指针由于引入了引用计数,所以需要考虑的一个情况是并发情况下智能指针引用计数更新的原子性,C++11对并发提供了原生的支持,同时加入了原子类型的支持.GCC4.7.0的库实现当中其实已经考虑了对并发情况的处理(没有考察之前的版本),比如说对指针的引用计数和弱引用计数都是使用_Atomic_word类型(应该是一种原子类型),在获取的时候使用类似__exchange_and_add_dispatch这种原子操作.在引用计数块上面使用了_Lock_policy,这些都对并发下的智能指针的健壮提供了保证.
从上面的图可以看出,shared_ptr的成员包括1.一个指针,这个指向需要管理的内存区域,注意这部分是不支持数组类型的成员的,简单来说你可以传入一个int作为模板参数,但是不支持int[]这样的模板参数(unique_ptr支持),如果想支持数组类型的