智能指针通俗一点来说他是一个类,在类中有一个指针,可以将new获得的地址复制给智能指针。当智能指针过期时,类中的析构函数将使用delete来释放内存。
在平时编写代码的时候经常会用到new来开辟空间,而我们开辟出来的空间必须得手动去delete他,但是如果程序员忘记去手动释放那边会出现一个麻烦的问题,内存泄漏!!或者是一块内存被多个函数同时使用时,如果其中一个函数不知道还有其他人也在使用这块内存而释放掉的话同样也会引起程序的崩溃。
引起内存泄漏一般的后果是很严重的,而且也是最让人头疼的一个问题,根据上面的问题,由此产生了智能指针的引入。智能指针很好的解决了这种问题。指针指针又有很多种包括:std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array、boost::weak_ptr、boost:: intrusive_ptr。而这篇文章主要用boost::shared_ptr和boost::weak_ptr这两种常用的智能指针来分析。
shared_ptr ,强智能指针,需要包含头文件头文件<memory>。他是专门用于共享所有权的,其在内部使用了引用计数。他是一种强引用,当有人需要用这个指针时他的引用计数都会加一,每析构一次引用计数就会减一,当引用计数为零时便会默认调用delete来释放也可以是自己的函数来释放。这样做的好处在于减轻了程序员手动释放内存的负担。之前,为了处理程序中的异常情况,往往需要将指针手动封装到类中,通过析构函数来释放动态分配的内存;现在这一过程就可以交由shared_ptr完成了。
shared_ptr 智能指针的实现
#include<iostream>
#i