一、什么是智能指针?
一句话解释:
智能指针就是类模板。智能指针就是封装好的能够自动释放内存的对象。是不是感觉和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的智能指针。