0

我编写了一个自定义内存管理器,但在试图将其隐藏在幕后时遇到了麻烦。它的 API 公开了一个不带参数的模板方法 Allocate。魔术就是这样完成的。它使用提供的类型来推断一些东西并确保它可以稍后调用析构函数,因此我能够在此方法期间获取 RTTI 非常重要。

问题是我想使用 global new 所以内存管理器在幕后并且它不会强加奇怪的语法(如果我使用 global new 我也可以管理任何东西,而不仅仅是用户代码)。

所以问题是:有什么方法可以隐藏对Allocate<Object>( )within的调用operator new吗?

4

1 回答 1

0

您可以为单个类重载operator new()operator delete()。在这些运算符中的每一个中,您都会知道正在分配或释放的对象的基本类型。如果您进一步确保每个派生类型确实重载这些运算符,您就会知道确切的类型。如果对象被分配/解除分配,我认为没有办法确定类型。

请注意,当周围没有对象时调用这些运算符,或者因为它尚未构造,或者因为它已经被破坏。

于 2013-09-10T13:53:35.187 回答