程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實戰c++中的智能指針unique_ptr系列-- 使用std::unique_ptr代替new operator(錯誤:‘unique_ptr’ is not a member of ‘std’)

實戰c++中的智能指針unique_ptr系列-- 使用std::unique_ptr代替new operator(錯誤:‘unique_ptr’ is not a member of ‘std’)

編輯:C++入門知識

實戰c++中的智能指針unique_ptr系列-- 使用std::unique_ptr代替new operator(錯誤:‘unique_ptr’ is not a member of ‘std’)


寫了很多篇關於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 using namespace std; int main() { while (true) { int *x = new int; delete x; } return 0; }

這裡寫圖片描述

這裡再分享一個錯誤,在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的構造函數說起!!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved