全部博文(556)
分类: C/C++
2011-05-09 15:35:51
智能指针的作用是防止new出来(处于堆上)的对象因指针操作失误没有及时delete而导致内存泄露。
智能指针原理是用一个计数类RefCount存储要指向的地址和指向该地址的指针数,根据指针数来决定是否应该delete申请的内存。
如图:
SmartPtr
当将一个new出来的内存地址赋值给SmartPtr指针ptr1时,会用一个RefCount类m_Ptr存储这个内存地址,并将m_iCount设为1。
SmartPtr
当其他SmartPtr指针ptr2指向这个指针的时候,并不是单单将new出的目标地址赋给ptr2指针,而是将整个ptr1的RefCount(目标地址和指针计数器)传到ptr2,然后m_iCount会加1,表示多了一个指针指向这个地址。
ptr1=new CMyObject("second object");
当ptr1将指向新地址的时候,会将之前RefCount的m_iCount减1,表示少了一个指针指向之前地址,如果旧地址的计数器m_iCount为0,则表示已经没有指针指向这个地址了,将会自动调用delete释放旧的地址。
如图:当多个Smart指针指向一个地址的时候,各指针共享一个RefCount类对象,m_iCount记录指针数。