C++11為我們提供了智能指針,給我們帶來了很多便利的地方。
那麼如果把unique_ptr作為vector容器的元素呢?
形式如出一轍:vector
但是怎麼給vec添加元素呢?
看下面:
#include
#include
#include
using namespace std;
int main()
{
vector> vec;
vec.push_back(1);//錯誤
return 0;
}
那麼先定義一個unique_ptr,再進行push_back():
#include
#include
#include
using namespace std;
int main()
{
vector> vec;
unique_ptr sp(new int(126));
vec.push_back(sp);//嘗試引用已刪除的函數
return 0;
}
這就是unique智能指針的所有權問題,這個時候就需要使用std::move:
#include
#include
#include
using namespace std;
int main()
{
vector> vec;
unique_ptr sp(new int(126));
//vec.push_back(1);
vec.push_back(std::move(sp));//嘗試引用已刪除的函數
cout << *vec[0]<< endl; // 輸出126
//cout << *sp << endl;
return 0;
}
但是此時,上面代碼的sp編程了什麼呢? 使用*取值看一下,結果程序崩潰,原因何在?
就是此時sp已經釋放,所有權轉移了!