表达new T[n]
可以或不可以在阵列中初始化每个对象,这取决于T
是。
如何复制使用此初始化行为allocator
?
struct Foo
{
int x;
Foo() : x(1)
{ }
};
Foo *p = new Foo[1];
assert(p[0].x == 1);
表达new T[n]
可以或不可以在阵列中初始化每个对象,这取决于T
是。
如何复制使用此初始化行为allocator
?
struct Foo
{
int x;
Foo() : x(1)
{ }
};
Foo *p = new Foo[1];
assert(p[0].x == 1);
在C ++ 03,分配器接口只知道初始化对象的一种方式,这也是从另一个对象复制。 C ++ 11具有更多。
你问的默认初始化,这意味着(约),“要么什么都不做或调用默认的构造函数”。 分配器接口不能做在C ++ 03的后者。
我想你可以写的东西,如:
T *ra = allocator.allocate(1);
if (!is_pod<T>::value) {
// in C++03
allocator.construct(ra, T());
// in C++11
allocator.construct(ra);
}
这is_pod
测试可能是错的,但。 检查标准到底是什么条件下使用默认初始化什么都不做。 显然is_pod
并不在C ++ 03的存在,但我依稀记得,加速了,在大多数的实施工作的那种东西。
我认为,你在这里战斗的设计。 分配器接口被设计为通过容器中使用。 容器设计不包含未初始化的元素,所以他们没有使用默认初始化。