C ++ - 设置没有构造函数的基类vptr?

时间:2014-01-30 00:05:38

标签: c++ base-class vptr

我用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”。阅读评论以获取更多信息。

0 个答案:

没有答案