一个奇怪的使用新的c ++关键字

Rob*_*ean 1 c++ memory keyword

我遇到了一些代码如下.

char *buffer = new char[sizeof(PoolThread) * numThreads];
m_threads = reinterpret_cast<PoolThread*>(buffer);
for (int i = 0; i < numThreads; i++)
{
    new (buffer)PoolThread(*this);
    buffer += sizeof(PoolThread);
}
Run Code Online (Sandbox Code Playgroud)

我想new这里是用于初始化指向m_threads真实对象(PoolThread类)的空内存空间

我用谷歌搜索,但只找到这样的用法信息new:

pointer = new somthing[number]; 
Run Code Online (Sandbox Code Playgroud)

我希望new在我的上层代码示例中使用更多信息.这种用法是否来自c ++标准?

Jac*_*ack 7

这是一个贴图,当您想要覆盖操作系统的普通内存管理器并准确选择要放置正在分配的对象的位置时,可以使用它.

在您发布的代码中,bufferaddress用于指定元素的分配位置(实际上它已被修改,以便每个连续的分配都跟在地址之后).

当然,由于它使内存管理器免于内存分配的责任,因此您自己有责任为存储的内容提供有效的地址.这就是它在真正需要的时候使用的原因.