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