小编Gre*_*g K的帖子

你能/你如何重新分配使用placement new创建的C++对象?

我有一个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().我希望有人可以向我解释为什么这不起作用以及可能的替代方案.

c++ memory-management

2
推荐指数
1
解决办法
495
查看次数

标签 统计

c++ ×1

memory-management ×1