[英]delete[] a specific array block allocated with new in c++
我正在用 C++ 編寫一個簡單的堆棧程序。 我已經動態分配了數組。 我想知道是否有任何方法可以刪除(解除分配)數組的特定塊。
int *arr = NULL ;
arr = new int[some_size];
.
.
.
.
//now suppose I want to deallocate a specific block
//suppose
int i = 4;
//can I do something like
delete[i] arr;
我知道這是一個愚蠢的問題,但我仍然想知道。 謝謝你。
只能解除分配整個分配 - 而不是它的一部分。 沒有像delete[i]
這樣的語法。 只有直接從new[]
返回的指針可以傳遞給delete[]
。
但是,您可以實現自己的分配器,該分配器可以處理全局分配器中的單個塊,從而提供可以單獨釋放的較小分配。 這是一項高級技術:不適合初學者。 它(可能)不是您實現任何程序所需要做的事情。 但在某些情況下,如果您知道自己在做什么,它對優化很有用。
我將如何實現我自己的分配器
從全局分配器中分配一些內存 M。
編寫一個以字節數為參數的函數。 在函數中,使用一些數據結構來跟蹤 M 的哪些部分先前已分配。 從 M 中選擇一個尚未分配的字節范圍。 在數據結構中將其標記為已分配,返回指向該范圍開頭的指針。
編寫另一個將指針作為參數的函數。 將為該分配保留的內存標記為空閑。
更好的是,使用這些函數實現一個符合標准庫中分配器概念的類型,以便分配器可以用作標准容器的模板參數。
數組是一種數據結構,可以存儲相同類型元素的固定大小的順序集合。
數組有一個非常特殊的連續內存分配特性,這意味着編譯器將連續的內存塊分配給一個數組。它賦予了數組優勢,例如
因此,通常不可能從連續內存中刪除特定塊。 因此,針對這個特定問題,發明了鏈表。
但是在 C++ 中,我們有 std:vector 這些不是靜態數組,而是比靜態數組占用更多空間的向量。
假設該問題被修改為向量,我們可以使用 pop_back 函數或擦除函數。
1.pop_back:簡單地刪除最后一個向量。
int main()
{
std::vector<int> numbers;
print(numbers);
numbers.push_back(5);
numbers.push_back(3);
numbers.push_back(4);
print(numbers);
numbers.pop_back();
print(numbers);
}
2.erase:從容器中擦除指定的元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.