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

时间:2013-05-23 03:54:19

标签: 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);
}

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

我用谷歌搜索过,但只发现new的使用信息如下:

pointer = new somthing[number]; 

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

1 个答案:

答案 0 :(得分:7)

这是一个placement new,当你想要覆盖操作系统的普通内存管理器并选择你想要放置一个你正在分配的对象的确切位置时,就会使用它。

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

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