寫了很多篇關於vector的博客,其實vector很便捷,也很簡單。但是很多易錯的問題都是vector中的元素為智能指針所引起的。所以決定開始寫一寫關於智能指針的故事,尤其是unique_ptr指針的故事。
這是個開始,就讓我們使用std::unique_ptr代替new operator吧!
還是用程序說話:
#include
int main()
{
while (true)
int *x = new int;
}
看下任務管理器中的內存:
此時使用智能指針unique_ptr:
#include
#include
int main()
{
while (true)
std::unique_ptr x(new int(10));
}
兩張圖片就可以清晰看到智能指針帶來的好處。
如果我們對傳統的指針及時的釋放,我們也可以達到智能指針的效果:<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
#include
這裡再分享一個錯誤,在MAC編輯器上寫的C++代碼,其中用到了智能指針unique_ptr,這個代碼在vs2015中時候的時候,就會提示錯誤:
‘unique_ptr’ is not a member of ‘std’
原因很簡單,就是缺少unique_ptr的頭文件:
#include
那麼你也許會問題,智能指針是何時釋放內存的呢?
unique_ptr objects automatically delete the object they manage (using a deleter) as soon as they themselves are destroyed, or as soon as their value changes either by an assignment operation or by an explicit call to unique_ptr::reset.
下一篇會從unique_ptr的構造函數說起!!