首页 > 编程语言 > 详细

智能指针(现代 C++)

时间:2016-03-27 17:36:47      阅读:266      评论:0      收藏:0      [点我收藏+]

在现代 C++ 编程中,标准库包含智能指针,该指针用于确保程序不存在内存和资源泄漏,而且是异常安全的。

原始指针:RawPointer

智能指针:SmartPointer

原始指针和智能指针比较:

void UseRawPointer()
{
    // Using a raw pointer -- not recommended.
    Song* pSong = new Song(L"Nothing on You", L"Bruno Mars"); 

    // Use pSong...

    // Don‘t forget to delete!
    delete pSong;   
}


void UseSmartPointer()
{
    // Declare a smart pointer on stack and pass it the raw pointer.
    unique_ptr<Song> song2(new Song(L"Nothing on You", L"Bruno Mars"));

    // Use song2...
    wstring s = song2->duration_;
    //...

} // song2 is deleted automatically here.

  在初始化智能指针后,它将拥有原始的指针。这意味着智能指针负责删除原始指针指定的内存。智能指针析构函数包括要删除的调用,并且由于在堆栈上声明了智能指针,当智能指针超出范围时将调用其析构函数,尽管堆栈上的某处将进一步引发异常。

  通过使用熟悉的指针运算符(-> 和 *)访问封装指针,智能指针类将重载这些运算符以返回封装的原始指针。

  C++ 智能指针思路类似于在语言(如 C#)中创建对象的过程:创建对象后让系统负责在正确的时间将其删除。不同之处在于,单独的垃圾回收器不在后台运行;按照标准 C++ 范围规则对内存进行管理,以使运行时环境更快速更有效。

  引用计数为0时,内存对象释放是GCC的惯用算法,但c++没有GCC,用户自己控制内存,智能指针让用户可以手动实现一个简单的GCC,确保不发生内存泄漏。

 

C++ 标准库智能指针:

  unique_ptr

  shared_ptr

  weak_ptr

msdn文档地址:https://msdn.microsoft.com/zh-cn/library/hh279674.aspx (这个写的很好很详细)

智能指针(现代 C++)

原文:http://www.cnblogs.com/yiii/p/5325990.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!