2013-03-23 56 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)。