我問的原因是因爲我爲我的散列表使用非動態分配的數組;然而,對於我的哈希表中的我的rehash函數,我需要能夠更改我的舊數組的大小。我怎樣才能做到這一點?如何在C++中刪除非動態分配的數組?
回答
如果你想改變大小,你必須動態分配它,最好使用std::vector
。
簡答:你不能。
較長的答案會引入非常髒和操作系統相關的黑客行爲。
向我們展示一些這些黑客?我真的很好奇。 – 2012-03-17 15:11:18
@LuchianGrigore兩個遠離語言級別的支持:1.)您可以調整鏈接描述文件(可能通過使用源代碼中的註釋的宏處理器)。例如,可以使用OVERLAY
將兩個符號放在相同的位置。通過使用第二個符號,您可以覆蓋和重用您的數據。 2.)通過對齊將數據表放入內存頁框。釋放,操縱頁面表。但是,我認爲這樣做沒有意義。 –
Matthias
2012-03-17 16:29:03
您也可以手動調用析構函數,然後使用放置位置new調用構造函數。 – 2012-03-17 17:28:35
如果您想手動控制內存的生存期,則需要使用動態內存分配。非動態分配的內存(靜態分配)只會在內存超出範圍時解除分配。由於此內存駐留在您的管理對象中,因此當擁有對象處於釋放狀態時,該內存僅超出範圍。
所以你需要動態分配一個緩衝區,然後在調整大小時分配一個新緩衝區,將舊緩衝區中的內容複製到新緩衝區中,刪除舊緩衝區,然後將對象的內部指針分配給新緩衝區。喜歡的東西:
// allocate a new, bigger array
Cell* newBuff = new Cells[/*newSize*/];
// copy into the new array
for (i = 0; i < myBufferSize; ++i)
{
newBuff[i] = myBuffer[i];
}
// delete the old array
delete myBuffer;
// point to the new array
myBuffer = newBuff;
你能立足於一個std::vector
您的哈希表,而不是使用手動內存分配的?這將處理動態數組,你,你可以用一個簡單的.resize
調整:
myBuffer.resize(/*newSize*/)
假設你有這樣的事情:
TableEntry table[max_table_size];
您將需要一個單獨的變量,表示如何你實際使用的陣列很多:
size_t table_size = 0;
然後你只是使用該變量,而不是嘗試調整實際數組的大小。
有幾十種方法可以解決這個問題。當然,「釋放」沒有分配到堆上的內存 - 是想象中最糟糕的黑客。
我建議是這樣的:
class MyClass
{
TableEntry* m_pStaticTable[/* some size */];
TableEntry* m_pActualTable;
size_t m_nSize;
MyClass()
:m_pActualTable(m_pStaticTable)
,m_nSize(_countof(m_pStaticTable))
{
}
~MyClass()
{
if (m_pActualTable != m_pStaticTable)
delete[] m_pActualTable;
}
};
- 1. 刪除動態分配的數組C++
- 2. 如何刪除C++中的動態分配數組?
- 3. C++動態數組的刪除部分
- 4. 如何從動態分配的數組中刪除元素?
- 5. 動態數組C++(刪除)
- 6. C++刪除二維動態分配數組
- 7. 動態數組分配C++
- 8. C中的動態數組分配
- 9. 如何在C++中動態分配連續的二維數組?
- 10. 如何在C中找到動態分配數組的大小?
- 11. 如何在ANSI C中動態分配POINTERS的二維數組?
- 12. 動態分配的數組如何在C++中被釋放?
- 13. 動態數組分配在C++問題
- 14. 在C++中刪除動態分配的類實例?
- 15. 如何在C中動態分配名稱數組?
- 16. 如何在C中創建多維動態分配數組?
- 17. 如何在Qt C++中爲數組動態分配內存?
- 18. 如何在C++中動態分配指針數組?
- 19. 如何在C中動態分配一個字符串數組?
- 20. 如何在C++中使用「new」動態分配向量數組?
- 21. 如何在C++中靜態初始化靜態動態分配的數組?
- 22. 如何在單個刪除語句中刪除多個動態分配的數組?
- 23. 通過new動態分配並在C++中刪除
- 24. C++如何刪除本地分配的char數組?
- 25. 刪除3D動態數組C++
- 26. C中動態分配數組的數組元素數
- 27. 如何刪除分組中的滾動
- 28. 在java中刪除動態數組
- 29. 如何動態分配結構數組?
- 30. C++動態數組1維非動態
什麼是 「非動態」 是什麼意思?靜態存儲?自動(「堆棧」)存儲? – delnan 2012-03-17 15:06:04
爲什麼不使用像vector這樣的容器而是使用list? – 2012-03-17 15:06:58