在我的项目中,我有一个抽象基类“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/