我一直在阅读C Primer(我发现这是一本非常好的学习C的书),并且在放置新部分中给出了一个例子.该示例使用char数组为placement new提供内存空间
const int BUF = 512; const int N = 5; char buffer[BUF]; double * pd1; pd1 = new (buffer) double[N];
我的问题是为什么使用char数组为新的贴图提供内存空间?上面代码中的最后一行是为double数组分配内存,当原始内存空间包含char数组时,这怎么可能?如果placement new正在使用char数组的内存空间,这是否意味着当我们分配double数组时它会覆盖该内存中的char数组?
如果问题很奇怪,再次对不起,但希望我已经说清楚了.
解决方法
why is it using a char array to provide memory space for the placement new?
为什么不? char是C定义的最小类型,几乎在每个实现中,它的大小都是一个字节.因此,当您需要分配特定大小的内存块时,它是一个很好的类型.
C还有关于char数组(以及只有char的分配)的非常具体的机制.例如,新的char [*]将不会与char的对齐对齐.它将与任何类型的最大正常对齐对齐因此,您可以使用它来分配内存,然后将任何类型构造到该内存中.
Also the last line in the code above is allocating memory for an array of double,how is that possible when the original memory space contains a char array?
它没有分配任何东西.它正在构建一个数组,使用你给它的内存.这就是放置新的行为,它在所提供的内存中构造一个对象.
If the placement new is using the memory space of the char array,does this mean when we allocate the double array it overwrites the char array in that memory?
是.