這是有效的C++(例如不調用UB),並實現我想要的內容,而不會泄漏內存? valgrinds抱怨free
和delete
不匹配,但最後說「無泄漏是可能的」。new [n]並刪除每個位置刪除,而不是整個塊刪除[]
int main() {
int* a = new int[5];
for(int i = 0; i < 5; ++i)
a[i] = i;
for(int i = 0; i < 5; ++i)
delete &a[i];
}
的原因,我問:我有一個使用boost::intrusive::list
和我new
被添加到列表中的每個對象的類。有時我知道有多少對象要添加到列表中,並且正在考慮使用new[]
來分配一個塊,並且仍然能夠使用boost::intrusive
的Disposer樣式自行處理每個對象的delete
。
沒錯。而且,當你使用new(或new [])分配某些內容時,它會在某個表的某處存儲一個符號,以便分配特定的內存塊。相應的刪除(或刪除[])調用將查找該表示法。 「 – 2010-03-18 23:32:54
」你不能對新的未分配的內容調用delete,否則你會得到堆損壞。「 你會崩潰! – 2010-03-18 23:59:44