智能指针技术
智能指针技术实质是:记录引用某一个对象的次数,一旦检测到次数为0,这时就自定将此对象所占内存释放。
解决问题:
1、指针初始化问题。(智能指针自动初始化)
2、new之后没有及时delete,内存泄漏。(当计数为0时,自动销毁)
3、野指针存在(当有对象仍在使用指针时,智能指针不会清零,仍然可以访问)
智能指针技术不能解决对象循环引用的问题:a引用b;b引用a,这样的情况下使用简单的智能指针技术无法解决,故引入强指针和弱指针;
强指针和弱指针
强指针可以操作对象,弱指针不能够操作对象。
强指针与一般意义的智能指针概念相同,通过引用计数来记录有多少使用者在使用一个对象,如果所有使用者都放弃了对该对象的引用,则该对象将被自动销毁。
弱指针也指向一个对象,但是弱指针仅仅记录该对象的地址,不能通过弱指针来访问该对象,也就是说不能通过弱智真来调用对象的成员函数或访问对象的成员变量。要想访问弱指针所指向的对象,需首先将弱指针升级为强指针(通过wp类所提供的promote()方法)。弱指针所指向的对象是有可能在其它地方被销毁的,如果对象已经被销毁,wp的promote()方法将返回空指针,这样就能避免出现地址访问错的情况
使用智能指针条件:
1、这个类是基类RefBase的子类或间接子类
2、这个类必须定义虚构造函数