У меня есть объект C ++, который создается в плагине в буфере памяти, предоставленном хост-приложением, с оператором размещения new способом, подобным следующему коду:
MyClass* createObject(void* inNewBlock)
{
MyClass* elementAddr = static_cast<MyClass*>(inNewBlock);
new (elementAddr) MyClass(); // Placement new into pre-allocated memory
}
Я знаю, что не могу удалить объект, созданный таким образом, но мне было интересно, есть ли способ обнулить память и перераспределить объект на более позднем этапе, если мне это нужно:
void removeObject(MyClass* object)
memset(object, NULL, sizeof(MyClass));
}
void restoreObject(MyClass* object)
{
new (object) MyClass(); // Placement new into pre-allocated memory
}
Код выше не работает. Я попробовал это, и приложение хоста зависает или падает, когда я звоню restoreObject()
. Я надеялся, что кто-нибудь сможет объяснить мне, почему это не работает и какая альтернатива может быть.