我遇到了一些代码如下。
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 ++标准?
答案 0 :(得分:7)
这是一个placement new,当你想要覆盖操作系统的普通内存管理器并选择你想要放置一个你正在分配的对象的确切位置时,就会使用它。
在您发布的代码中,buffer
地址用于指定元素的分配位置(实际上它已被修改,以便每个连续分配都遵循地址)。
当然,由于它使内存管理器免于内存分配的责任,因此您自己有责任为存储的内容提供有效的地址。这就是为什么它在真正需要的时候使用。