gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:36 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com