是否可以重载“ref new”以从特定堆分配?

时间:2013-03-23 21:39:46

标签: windows-runtime

我很好奇是否可以重载“ref new”操作符来从我选择的堆中分配内存。我正在寻找一个库,允许用户指出我的库将动态分配的最大内存量。在内部,我计划使用HeapCreate和HeapAlloc来定义我自己的堆,使用用户提供的最大大小。然后,如果我的任何内部内存分配超出了最大分配内存,我将优雅地失败。如果我有一个返回“ref class”的API(比如Platform :: String ^),就会出现问题。一旦我使用“ref new”操作符,我就无法控制内存来自哪个堆,我可能会破坏与用户的合同。

有没有办法重载“ref new”操作符从我自己的堆中分配或以其他方式跟踪我的库(或DLL)分配了多少内存“ref new”以确保我不会破坏与我的用户签订合同?

1 个答案:

答案 0 :(得分:0)

Visual Studio 2012 C ++编译器中目前没有扩展点允许您重载“ref new”运算符。

此外,您提议的实现无法使用HeapAlloc / HeapFree创建自己的堆,因为这会使Store认证失败。 Windows应用商店应用只能访问进程堆(GetProcessHeap)。