2017-06-17 89 views
-3

我一直在爲此奮鬥了很長一段時間,例如,如果我要頭腦風暴的想法,我不知道該用哪個?我不應該想太多,並與智能指針矢量工作?請詳細說明一下,或者爲什麼我應該使用哪些代碼示例?什麼時候在C++中使用智能指針或向量的矢量?

vector <Foo> example1; 

vector<unique_ptr<Foo>> example2; 
+1

我不明白您遇到的問題是什麼。這兩種類型是完全不同的。是的,你可以讓智能指針像一個矢量,但你爲什麼要這麼做? – Rakete1111

+0

沒有很好的理由,不要堆分配。 – 2017-06-17 17:14:26

+0

如果你不知道什麼時候使用'的unique_ptr '或任何其他智能指針,那麼你propably不需要一個,應'矢量'堅持。有一個指針向量增加了一個間接級別,使事情變得複雜。 – zett42

回答

-1

從你問題我假設你是在談論這樣的事情說明...

class Foo { /*...*/ }; 

std::vector< std::shared_ptr<Foo> > vec_of_ptr; 

std::vector< std::vector<Foo> > vec_of_vec; 

vec_o​​f_ptr將指針保存對象的列表 - > 1維列表

vec_o​​f_vec將是一個指針保存對象列表 - > 2維列表

是我你問什麼?

編輯完成後得到一個否決

注意:一旦原來的問題得到修改,那麼原來的答案像我看完後看起來當然傻:)

事實上的這篇文章https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d我只是想通過實驗來回答一個問題。

很顯然,作者和我們所有人一樣可能不知道到底是什麼問題。我試圖重複和可視化的原始問題,並以某種方式作者找出另一個更接近的問題。

我認爲這正是討論和頭腦風暴的力量。 正確的答案需要一個正確的問題,一開始就不容易弄清楚。

大概下來選民必須留下一些建設性的意見,因爲只是盲目的自我。

+0

對不起,我改寫的問題,我的意思是這 '矢量< Foo >例1; 'OR 'vector > example2;' – Eusto

+0

std :: unique_ptr是一個智能指針,它通過指針擁有並管理另一個對象,並在unique_ptr超出範圍時處置該對象。因此,您的意思是比較矢量< Foo > example1;與矢量> example2; ? – PerelMan

+0

那麼我的意思是我在哪些情況下使用哪一種? 'vector < Foo > example1'或'vector > example2'。我真的不知道你爲什麼要加一個星號盈'矢量<的unique_ptr < Foo* >> example2',因爲它已經是一個獨特的指針? – Eusto

-1

可能是下一個問題是

「爲什麼我們需要有一個指針,而不是通常的對象?」

「爲什麼我們需要一個唯一的指針而不是共享指針?」

事後你就會知道答案 「爲什麼我們需要唯一指針的向量? 共享指針,而不是一個向量.. 而不是平常的物體的向量。」

一些基本的區別

vector < Foo> example1;

您將常用對象存儲在向量中。在矢量操作(例如插入)期間將執行Foo的操作。

vector < unique_ptr < Foo >> example2;

你存儲唯一對象在一個向量中的指針。 Foo的複製操作將不會執行任何矢量操作。 你需要有移動語義。 例如

unique_ptr <Foo> obj; 
    example2.insert(std::move(obj)) 

基本上,如果你打算在你的應用程序的唯一,非可複製Foo對象,你應該使用的unique_ptr。

否則,如果一個Foo OBJ有小內存佔用我只想用平常的物體的向量。