原文位置:http://blog.csdn.net/luoshengyang/article/details/6786239
一、轻量级指针:
主体内容:
1、轻量指针计数器类:包含内部所指向的对象以及一个使用轻量指针的计数,当计数为0时会析构掉计数器中的对象。
2、轻量智能指针类:用以指向计数器,指向计数器时,计数器计数加一,智能指针析构时,计数器计数减一。
关键点:
1、智能指针的关键是用计数器替代对象本身。
2、一个计数器对应一个对象,多个计数器对应一个对象同样会造成内存错误。
3、智能指针类中控制计数器的方法是模板的,所以智能指针类传入的构造函数的参数必须实现了计数方法。
二、强指针与弱指针
主体内容:
1、强弱指针计数器类:同时持有强弱指针的计数以及用以判断析构方式的标志位,根据标志位来判断强计数、弱计数为0时是否析构计数器包含的对象。
2、强智能指针类:与轻量智能指针类没什么区别,主要的逻辑交给了强弱指针计数器类
3、弱智能指针类:与轻量智能指针类相比,多了一个自动升级指针的函数,并且通过强智能指针类中*与->的两个符号的重载来实现了弱指针向强指针的智能升级。
关键点:
1、计数器的析构需要根据创建时的标志位确定
2、弱指针可以提升为强指针
3、强指针提升时弱指针一定提升,弱指针提升时强指针不一定提升,弱指>=强指
4、强指针与弱指针的使用条件:强弱指针的存在主要目的在于避免循环调用,所以原则上强指针用于局部变量,需要控制生命周期的变量,弱指针用于指向父对象,不需要控制生命周期的变量。