2013-03-23 65 views
0

我很好奇,如果有可能重載「ref new」操作符來從我選擇的堆中分配內存。我正在創建一個庫,允許用戶指出我的庫將動態分配的最大內存量。在內部,我計劃使用HeapCreate和HeapAlloc來定義我自己的堆,使用用戶提供的最大尺寸。然後,如果我的內存分配超出了最大分配的內存,我將優雅地失敗。問題來了,如果我有一個API返回一個「ref class」(如Platform :: String ^)。只要我使用「ref new」操作符,我就無法控制內存來了,我可能會違反我的用戶合同。是否有可能重載「ref new」以從特定堆分配?

是否有任何方法來重載「ref new」操作符從我自己的堆中分配,或者跟蹤我的庫(或DLL)分配給「ref new」的內存量,以確保我不會與我的用戶打破合同?

+0

這是不可能的。它是COM的友好語法,它稱爲類工廠。內存由實現該類的模塊擁有,並通過引用計數進行管理。 – 2013-03-24 00:06:46

回答

0

目前Visual Studio 2012 C++編譯器中沒有擴展點,它允許您重載「ref new」運算符。

此外,您的建議實現無法使用HeapAlloc/HeapFree創建自己的堆,因爲這會導致Store認證失敗。 Windows Store應用程序只能訪問進程堆(GetProcessHeap)。

相關問題