c++ - 在对象构造期间获取大多数派生类型

标签 c++ memory-management

在我的项目中,我有一个抽象基类“Base”。我想跟踪从“Base”派生的对象的所有动态分配/解除分配。为此,我覆盖了“Base”中的新建/删除运算符。

在覆盖的 new 运算符中成功分配内存后,我想通知我用于跟踪内存的对象分配已经发生,分配的最派生类型及其大小。大小不是问题(因为它直接传递给“Base”的新运算符),但获取最派生类型是一个问题。

我倾向于认为这在我尝试做的方式中是不可能的。由于尚未构建对象的更多派生部分,因此无法知道它们是什么。但是,“基”类的重载新运算符对最终产品有所了解 - 大小 - 那么是否有可能了解有关它的其他信息?

对于上下文:

void* Base::operator new( size_t size )
{
    void* storage = malloc( size );

    if ( storage == NULL )
        throw std::bad_alloc();

    // Notify MemoryTracker an allocation has occurred
    // MemoryTracker::Instance().Allocate( type, size );

    return storage;
}

最佳答案

你是对的,这种方式是不可能的,因为 new 运算符只是分配内存,仅此而已。做这种事情的正确位置是构造函数,而不是分配器,在这里你应该能够使用 RTTI 来确定构建对象的类型(因此它可以在 Base 构造函数中完成,而不是在每个子类中完成构造函数)。

关于c++ - 在对象构造期间获取大多数派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6864621/

相关文章:

objective-c - UIImage :resizableImageWithCapInsets 创建的崩溃释放图像

c - malloc() 分配的数据不为零

c - 如何将 union 缓冲区与 RAM 地址字节对齐

iphone - Objective-C 自定义二传手

c++ - malloc 钩子(Hook)的目的是什么?

c++ - 包括CallbackGroups后ROS通信未响应

java - 如何查看/监控我的 zeromq PUBlisher 的订阅者?

c++ - 在 C++ 中从文本文件快速创建图形

c++ - 返回从 native C++ 调用编码的 System::String 时崩溃

c++ - Qt4.5 : Implicitly shared QImage: are methods like . bits() 总是复制(文档不清晰)