Я пытаюсь написать новые / удалить функции для своего пользовательского распределителя, но объекты, инициализированные с размещением new, выдают «место выполнения нарушения доступа» всякий раз, когда вызывается виртуальная функция.
Когда я пытаюсь выделить два объекта одного и того же класса, один с новым и один с новым размещением, их vptr указывают на те же функции, но только объект, созданный с новым, может выполнить функцию.
//Definition not shown
class Component
{
public:
Component() {}
virtual void Update() {}
virtual void Init() {}
};
//Definition not shown
class MeshComponent :
public Component
{
public:
virtual void Update() override;
virtual void Init() override;
};
#define fnew(T,...) new (malloc(sizeof(T))) T (__VA_ARGS__);
MeshComponent* newComponent = fnew(MeshComponent);
MeshComponent* newComponent2 = new MeshComponent();
newComponent2->Update(); //Runs like expected
newComponent->Update(); //Access violation executing location
Есть идеи, почему это так?