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数组? 如果问题很奇怪,再次对不起,但希望我已经说清楚了. 解决方法
为什么不? char是C定义的最小类型,几乎在每个实现中,它的大小都是一个字节.因此,当您需要分配特定大小的内存块时,它是一个很好的类型. C还有关于char数组(以及只有char的分配)的非常具体的机制.例如,新的char [*]将不会与char的对齐对齐.它将与任何类型的最大正常对齐对齐因此,您可以使用它来分配内存,然后将任何类型构造到该内存中.
它没有分配任何东西.它正在构建一个数组,使用你给它的内存.这就是放置新的行为,它在所提供的内存中构造一个对象.
是. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |