将global new与自定义内存管理器一起使用

时间:2013-09-10 13:36:17

标签: c++ templates memory-management syntax new-operator

我已经编写了一个自定义内存管理器,并且无法在幕后隐藏它。它的API公开了一个不带参数的模板方法Allocate。这就是魔术的完成方式。它使用提供的类型来推断一些事情,并确保它可以在以后调用析构函数,因此在此方法中我能够获得RTTI非常重要。

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

所以问题是:我可以通过某种方式隐藏Allocate<Object>( )operator new的来电吗?

1 个答案:

答案 0 :(得分:0)

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

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