【问题标题】:Using global new with a custom memory manager将 global new 与自定义内存管理器一起使用
【发布时间】:2013-09-10 13:36:17
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这将是一个选项,但我的目标是让这个系统“打开”并为所有内容工作,包括我/用户可能无法访问的外部库。所以这并不能解决我的问题。不过,谢谢。
    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2018-10-02
    • 2019-10-16
    • 1970-01-01
    相关资源
    最近更新 更多