C++放置新

Kak*_*kia 6 c++

对不起,如果这个问题听起来很愚蠢,但我刚刚开始学习C++,并且有些事让我感到困惑.

我一直在阅读C++ Primer(我发现它是一本非常好的学习C++的书),并且在放置新部分中给出了一个例子.该示例使用char数组为placement new提供内存空间

const int BUF = 512;
const int N = 5;
char buffer[BUF];
double * pd1;
pd1 = new (buffer) double[N];
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么使用char数组为新的位置提供内存空间?上面代码中的最后一行是为double数组分配内存,当原始内存空间包含char数组时,这怎么可能?如果placement new正在使用char数组的内存空间,这是否意味着当我们分配double数组时它会覆盖该内存中的char数组?

如果问题很奇怪,再次对不起,但希望我已经说清楚了.

Nic*_*las 7

为什么使用char数组为placement new提供内存空间?

为什么不?char是C++定义的最小类型,几乎在每个实现中,它都是一个字节大小.因此,当您需要分配特定大小的内存块时,它是一个很好的类型.

C++也有非常具体的机制,关于如何char(并且 char被分配.new char[*]例如,A 将不与对齐对齐char.它将与任何类型的最大正常对齐对齐.因此,您可以使用它分配内存,然后在该内存中构造任何类型.

上面代码中的最后一行是为double数组分配内存,当原始内存空间包含char数组时,这怎么可能?

它没有分配任何东西.它正在构建一个数组,使用你给它的内存.这就是放置新的行为,它在所提供的内存中构造一个对象.

如果placement new正在使用char数组的内存空间,这是否意味着当我们分配double数组时它会覆盖该内存中的char数组?

是.