c++关键字new的奇怪用法

A strange use of c++ keyword of new

本文关键字:用法 关键字 new c++      更新时间:2023-10-16

我遇到了如下代码:

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++标准吗?

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

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

当然,因为它把内存管理器从内存分配的责任中解放出来,所以为你存储的东西提供有效的地址是你自己的责任。这就是为什么它只在真正需要的时候使用。