在某些用例中,您需要先分配存储空间,然后再在此存储中创建对象。
然后为了创建这些对象,您可能需要使用placement new:
T *pobj = new(pstorage);
但是您必须提供正确对齐的
pstorage
。
我不明白operator new的预期行为:
// properly aligned heap storage to hold N contiguous T objects
unsigned char *storage = new unsigned char[N*sizeof(T)];
new
表达式是否保证返回一个指向适合任何“非过度对齐”类型对齐的地址的指针,但并不意味着一些内存碎片(在连续调用new
弱对齐类型的情况下)?
C++ 中有三种类型的对齐方式:fundamental、extended 和 new-extended [basic.align]。 over-aligned 类型是一种具有扩展对齐方式的类型,但
operator new
的相关对齐方式实际上是 new-extended。
新表达式是否保证返回指向适合任何“非过度对齐”类型的地址的指针
operator new
保证返回一个指针,该指针适合任何没有新扩展对齐且具有所请求大小的类型。