2013-05-21 104 views
15

我試圖找到一些簡單的方法來放置std::vector<std::shared_ptr<int>>中的元素,但不能附帶任何東西。 std::shared_ptr採用指針作爲參數,所以我還是可以這樣寫:make_shared和emplace函數

std::vector<std::shared_ptr<int>> vec; 
vec.emplace_back(new int(10)); 

不過,我不希望儘可能地用手使用new,寧可想如果可能使用std::make_shared。問題是,如果我真的想使用它,我必須使用push_back代替,失去就地建設的優勢:

std::vector<std::shared_ptr<int>> vec; 
vec.push_back(std::make_shared<int>(10)); 

有沒有什麼辦法讓這兩個emplace_backstd::make_shared的優勢是什麼?如果沒有,在這種情況下我應該遵循一個指導原則嗎?

編輯:其實,我問了這個問題,但有一個無關的問題。 Andy的答案是好的,同時使用emplace函數和std::make_shared都沒有任何實際問題。

回答

14

您可以讓發生就地招建築:

vec.emplace_back(std::make_shared<int>(42)); 
+0

我認爲這是好,因爲它會得到 –

+0

沒有,他只是說他不能這樣做呢? – 0x499602D2

+0

@ 0x499602D2:爲什麼不呢? –

相關問題