在特定的内存地址创建新的C++对象?

Chr*_*ris 37 c++ memory location pointers object

在C++中是否可以在特定的内存位置创建新对象?我有一个共享内存块,我想在其中创建一个对象.这可能吗?

D.S*_*ley 61

你想要placement new().它基本上使用现有内存块调用构造函数,而不是从堆中分配新内存.

编辑:确保您在使用new()之前了解有关负责为使用展示位置创建的对象显式调用析构函数的说明!

  • 用于指定必须明确调用析构函数的+1,通常你不关心,但除了释放内存之外它还有副作用... (7认同)
  • 链接坏了:( (4认同)
  • 谢谢你对一个好问题的答案.我今天学了些新东西.我最终会将C构造变成cpp世界以实现这一目标. (3认同)
  • 我强烈建议多次阅读**所有**Marshall Cline的C++ FAQ Lite.这是一个宝贵的资源. (2认同)
  • 不幸的是,你指出它是有缺陷和错误的.使用像这样的char数组不是一个好主意.问题是声明的数组没有保证对齐.您需要做的是使用向量<char>因为内存是动态分配的,所以内存将被相关联(如果分配的空间等于或大于对象的大小(请查看新的alighment属性)标准)) (2认同)
  • @ D.Shawley:我强烈建议不要认真阅读常见问题.它在很多地方都存在严重缺陷,并且经常不同意Sutter/Alexandrescu和Meyers所支持的普遍接受的最佳实践. (2认同)

dim*_*mba 12

是.您需要使用operator new()的放置变体.例如:

void *pData = ....; // memory segment having enough space to store A object
A *pA = new (pData) A;
Run Code Online (Sandbox Code Playgroud)

请注意,placement new不会抛出异常.