智能指针

一、什么是智能指针?

一句话解释:

  智能指针就是类模板。智能指针就是封装好的能够自动释放内存的对象。是不是感觉和Java的自动内存回收机制有点类似?!其实使用过MFC连接数据库的基本都是使用过类似的智能指针。例如:CxxxPtr类。

二、智能指针的详解

  网上有许多关于这方面的内容。详细可以看这几个链接:

  http://blog.csdn.net/xt_xiaotian/article/details/5714477

  http://msdn.microsoft.com/zh-cn/library/hh279674.aspx

  http://dev.gameres.com/Program/Abstract/Design/Boost.htm

三、要点总结

1.智能指针和一般指针初始化的区别。

void UseRawPointer()
{
    //一般指针的初始化
    Song* pSong = new Song(L"Nothing on You",L"Bruno Mars");

    //不要忘了!
    delete pSong;
}
void UseSmartPointer()
{
    //在栈上通过一般指针对象,参数传递初始化
    unique_ptr<Song> song2(new Song(L"Nothing on You",L"Bruno Mars"));

}  //退出函数时自动删除,不用delete
2.std::auto_ptr(即标准库的智能指针)

(1)尽量不要使用“operator=”。如果使用了,右边的值(即先前的对象)不能再被使用,否则会出错。

(2)成员函数release()只是归还对象的所有权,不会释放对象,使用reset()成员函数就可以了。

(3)最好不要当成参数传递。

(4)最好在代码的独立行上创建智能指针,不要再参数列表中创建,否则会由于某些参数分配规则而发生轻微的

资源泄露情况。
 (5)由于标准库的智能指针有诸多的限制,所以可以使用boost的智能指针或者Loki的智能指针。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值