在代码编写过程中,我们不可避免的带入一些bug,某个指针过期失效后,并没有及时将对应的内存释放,这样就造成了内存泄漏,
如何避免类似问题的出现,除了代码编写过程中注意,其次可以通过智能指针帮我们做一些类似的工作
int test()
{
char *pStr1 = (char *)malloc(100);
if(pStr1 == NULL)
return 0;
char *pStr2 = (char *)malloc(200);
if(pStr2 == NULL)
return 0; //return 的时候,没有释放 pStr1 对应的内存
}
函数 test() 退出 pStr1 从栈空间中失效,但对应的内存没有及时释放掉,如果 指针在失效的同时,释放掉对应的内存就太好了
我们知道类对象的析构函数可以实现这个功能,但是一个普通的指针不具备对象的属性和功能,
此时,我们可以通过把普通指针 对象化 来实现该功能,具体的对象化实现是通过 类模版 来完成,以支持不同类型的指针,
这样我们不小心忘记释放的内存,智能指针就帮我们完成了
智能指针设计的思想总结:
将基本类型指针封装为类对象指针(这个类肯定是个模板,以适应不同基本类型的需求),
并在析构函数里编写delete语句删除指针指向的内存空间。
一个简单图片展示智能指针之间的转化 参考网址:http://www.jianshu.com/p/ad4dba29d624