C位置新

前端之家收集整理的这篇文章主要介绍了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];

我的问题是为什么使用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?

是.

猜你在找的C&C++相关文章