2011-12-05 33 views
3

動態內存分配運算符 - new和delete可以被特定的類覆蓋。我可以定義一個不同於Windows上C++運行時提供的默認內存分配方案。我有幾個相關的問題:覆蓋特定類的新操作符和刪除操作符的原因是什麼?

  1. 重寫新的和刪除運算符的特定類可移植,這樣它也可以在UNIX上工作?它是C++標準的一部分嗎?

  2. 什麼情況下可能需要重寫特定類的內存分配操作符?只有我能想到的情況是 - 跟蹤內存泄漏分配。

+0

似乎你首先假設它是Windows功能,然後詢問它是否可移植到標準中?看起來像一個倒退的路! –

+1

可能重複[爲什麼要替換默認的新的和刪除操作符?](http://stackoverflow.com/questions/7149461/why-should-one-replace-default-new-and-delete-operators) –

+0

@Tomalak - 我沒有承擔任何事情。什麼聲明會引起你的混淆?我可以重新訪問它。 –

回答

1

是的,它是便攜式的,但要注意的是MS的編譯器處理的它比ANSI標準不同的「無拋出」部分 - 得到了燒上。至於爲什麼,是跟蹤記憶,跟蹤泄漏,跟蹤分配都很好,但這些都可以在全球範圍內完成。你可以重寫新的/刪除類似VRAM分配的東西,但是我通常會在不同的函數中看到這種東西。覆蓋新/刪除的最大理由是,如果您對使用內存系統的方式有了更好的理解,並且可以比由供應商提供的漂亮而通用的new/delete版本更有效地定製您的函數。小對象分配被認爲是經常被忽視或者執行不力的事情,以及爲了調試目的你想分配多少信息。

0

如果您想以不尋常的方式對齊收件人。例如前幾次我將地址加8,並使用最後三位來實現其他目標

如果您想在預初始化的內存中找到新的類實例。例如,如果您想要從空節點列表中添加新節點。

相關問題