我用 C++ 编写了一个内存管理器。细节并不重要,但在设置时它会从堆中分配一个大字节数组,当调用它的分配函数时,它会将一些空闲内存字节清除为 0 并返回指向它们的指针。所以一个使用的例子是:
memoryManager->initialise(1024); //Allocates 1024 bytes
T* t = memoryManager->allocate<T>(); //Prepares sizeof(T) bytes and returns a ptr
这很好用,我已经对其进行了彻底的测试,并且完全按预期工作。但是,由于它只是创建了一个“假”指针,因此不会调用对象的构造函数。当我尝试分配一个从另一个继承的类时,这种情况就崩溃了——它的 vptr 永远不会被设置,因为这是在构造函数的开头完成的,并且对程序员是隐藏的。因此,一旦我调用基类函数,程序就会因段错误而崩溃。
有没有办法解决?我可以自己设置吗?
编辑:对于其他正在寻找方法的人,请搜索“新位置”。阅读评论以获取更多信息。