現在我有對象指針的兩個向量移動在矢量對象指向一個不同的載體
std::vector<Object*> vec1;
std::vector<Object*> vec2;
比方說,VEC 1有兩個對象和VEC 2現在沒有。我如何將vec1中的一個對象移動到vec2而不破壞實際的對象?所以,最後兩個矢量的大小都是1,每個矢量都有一個對象指針。
現在我有對象指針的兩個向量移動在矢量對象指向一個不同的載體
std::vector<Object*> vec1;
std::vector<Object*> vec2;
比方說,VEC 1有兩個對象和VEC 2現在沒有。我如何將vec1中的一個對象移動到vec2而不破壞實際的對象?所以,最後兩個矢量的大小都是1,每個矢量都有一個對象指針。
你不摧毀對象。把它從vec1和push_back中移出到vec2。即使你把它從兩者中取出,你也不會破壞這個物體。
假設你要到最後Object*
從vec1
移動到vec2
:
vec2.push_back(vec1[1]);
vec1.pop_back(); // not destroying Object*
假設你想任意Object*
移動到其他vector
然後獲取其vector::iterator
並將其複製到目的地。然後你可以使用它vector::erase()
。
爲什麼不''vec2.push_back(vec1.back());',爲了表明我們正在談論相同的元素。 –
在調用delete之前,您不會銷燬指向的數據(假設甚至有)。你可以做簡單的東西...
vec2.push_back(vec1[1]);
vec1.pop_back();
'delete'也不會「銷燬指針」。除此之外,如果不知道指針來自哪裏,那麼就不可能知道刪除操作會發生什麼。 –
非常真實,更新後。 – MGZero
前面已經指出的那樣,我認爲你可以從一般的指針更多的理解嘗試與他們做任何事情之前受益。你不是在移動或者對對象本身做任何事情,而是在移動/創建指向該對象的新指針。
如果向量包含對象而不是指向對象的指針,而您想移動而不是複製,我相信您可以使用std :: move,它返回可移動但不可複製的右值引用。
有那麼問題有關移動位置:What is std::move(), and when should it be used?
難道整個指針/對象/參考的東西還是有點不清楚嗎?也許你會從閱讀_ [好書]中受益(http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)_? – sbi