Невозможно вызвать виртуальные функции в классе, созданном с помощью malloc / размещения new - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь написать новые / удалить функции для своего пользовательского распределителя, но объекты, инициализированные с размещением 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

Есть идеи, почему это так?

1 Ответ

0 голосов
/ 06 апреля 2019

Я перезапустил Visual Studio и теперь он работает ... Спасибо за понимание, все.

...