我有一个C++对象,它是由宿主应用程序提供的内存缓冲区中的插件创建的,其中placement new运算符的方式类似于以下代码:
MyClass* createObject(void* inNewBlock)
{
MyClass* elementAddr = static_cast<MyClass*>(inNewBlock);
new (elementAddr) MyClass(); // Placement new into pre-allocated memory
}
Run Code Online (Sandbox Code Playgroud)
我知道我无法删除以这种方式创建的对象,但是我想知道是否有办法将内存清空并在以后重新分配对象,如果我需要这样:
void removeObject(MyClass* object)
memset(object, NULL, sizeof(MyClass));
}
void restoreObject(MyClass* object)
{
new (object) MyClass(); // Placement new into pre-allocated memory
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用.我试过了,当我打电话时,主机应用程序挂起或崩溃restoreObject().我希望有人可以向我解释为什么这不起作用以及可能的替代方案.