1

我遇到了一些如下代码。

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);
}

我猜new这里是为了初始化指向m_threads一个真实对象(PoolThread类)的空内存空间

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

pointer = new somthing[number]; 

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

4

1 回答 1

7

这是一个新的放置,当您想要覆盖操作系统的正常内存管理器并准确选择要放置要分配的对象的位置时使用它。

在您发布的代码中,buffer地址用于指定将分配元素的位置(实际上它已被修改,以便每个连续的分配都遵循地址)。

当然,由于它将内存管理器从内存分配的职责中解放出来,因此您有责任为您所存储的内容提供有效地址。这就是为什么它只在真正需要的时候使用。

于 2013-05-23T03:56:35.817 回答