2013-02-28 80 views
0

有可能行向量來push_backvector元素在一行時,它包含指針:的push_back非指針元素在一個

vector<SomeClass*> v; 
v.push_back(new SomeClass(initVar1)); 
v.push_back(new SomeClass(initVar2)); 
v.push_back(new SomeClass(initVar3)); 

有沒有辦法做一個在線push_back就像這與非 - 指針變量(它們必須是其他變量的副本)?

+0

請參閱http://stackoverflow.com/questions/4185350/is-it-safe-to-push-back-dynamically-allocated-object-to-vector – user1929959 2013-02-28 00:30:50

+0

看起來像需要C++ 11。有沒有辦法用C++ TR1做到這一點? – 2013-02-28 00:33:23

回答

6

如果他們有公共的拷貝構造函數,當然:

v.push_back(SomeClass(initVar)); 

注意push_back創建一個副本,無論如何,所以似乎沒有意義的我。在C++ 11中,如果可能的話,該對象將被移動。

此外,讓自己頭疼,並使用std::unique_ptr<T>而不是原始指針爲您的向量元素。以這種方式使用原始指針會完全禁用向量爲您管理內存的能力,從而擊敗一半使用它的目的。

+0

太棒了,謝謝。你可能想編輯你的例子來說'initVar1',因爲'some_instance'讓我認爲你正在討論當前實例的拷貝構造函數。這將需要我實例化該實例並擊敗嘗試在一行中完成的整個目的。 – 2013-02-28 00:47:29

+0

unique_ptr是否支持多態?例如。 'unique_ptr b = new Derived()'? – 2013-03-07 19:28:39

+1

@ChrisRedford:是的,它遵循C++的規則。你可以像在其他任何情況下一樣傳遞一個指向子類的指針; 'std :: unique_ptr b(new Derived());' – 2013-03-07 21:12:57

相關問題