vector<int>* v = new vector<int>;
for (int i = 0; i < 100; i ) {
(*v).push_back(i);
}
delete v;
我是否洗掉了向量的每個元素并釋放記憶體?如果不是我如何釋放記憶體?
uj5u.com熱心網友回復:
分配new運算式分配記憶體,在該記憶體中構造一個動態物件,并回傳一個指向該物件的指標。當您將此類指標傳遞給delete時,指向的物件將被銷毀并釋放記憶體。
當一個類的實體,例如一個向量被銷毀時,它的解構式被呼叫。vector 的解構式會破壞vector 的所有元素。
旁注 1:使用分配new和delete. 當您需要動態存盤時,更喜歡使用容器和智能指標等 RAII 構造。
旁注 2:一般情況下,您應該避免不必要地使用動態記憶體。很少需要像您的示例中那樣的奇異動態向量。我建議改為:
std::vector<int> v(100);
std::ranges::iota(v, 0);
旁注 3:避免使用(*v).push_back. 很難閱讀。更喜歡使用間接成員訪問運算子,也就是箭頭運算子:v->push_back
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/484062.html
標籤:C
上一篇:如何在不復制元素的情況下交換陣列
