大部分時間我都對如何完成對stl對象的分配/取消分配感到困惑。例如:採取這個循環。如何在標準模板庫中完成對象的分配/取消分配
vector<vector<int>> example;
for(//some conditions) {
vector<int>row;
for(//some conditions) {
row.push_back(k); //k is some int.
}
example.push_back(row);
}
在這種情況下,對象行發生了什麼情況。如果通過示例訪問,我仍然可以看到值,這意味着當我執行example.push_back(row)
時,會創建一個新副本。我對麼。有沒有一種防止相同的好方法(如果我是正確的)。
任何人都可以提供參考,我可以閱讀如何在stl
中處理分配/取消分配或避免此類內存複製問題(在大型應用程序的情況下)的最佳做法。
任何幫助表示讚賞。
不是每一個'push_back'都會導致新的內存分配;如果容器已經有內存,它將使用它來構造一個新的對象。查找'std :: vector :: reserve'。 – legends2k
在這個例子中,你可以做'example.push_back(std :: move(row));',因爲之後沒有任何東西使用'row'。 – aschepler
事實是'std :: vector'在內部複製數據(有時它必須分配更多的內存來處理越來越多的元素)。你總是可以使用指針來減輕對象拷貝的開銷,但是記得在之後刪除它們(否則使用智能指針)。 – freitass