【发布时间】:2014-11-10 12:30:35
【问题描述】:
我尝试编写一个“内联向量”类来方便地在堆栈上存储许多元素:
template<typename T, size_t size_ = 256>
struct InlineVector{
T content[size_];
size_t num;
T() : num(0) {}
~T() { for(size_t s = 0; s < num; s++){ content[s]->~T(); } }
template<typename _Up, typename... _Args>
void emplace_back(_Args&&... __args) { new (&content[num++]) T(__args); }
T& get(size_t i) { assert(i < num); return content[i]; }
}
出于效率原因,我希望content 不在X 的构造函数中初始化,即使T 只有一个非平凡的构造函数。如您所见,内容稍后会在实际插入时使用placement new 进行初始化。然而,C++ 似乎强制content 的所有元素必须在X 的初始化中进行初始化。例如,这不会编译:
struct Y{ Y(int){} }
X<Y> foo; // compile error, no constructor for Y is called in the construction of X
那么,即使数组元素类型需要构造函数,怎么可能有一个未初始化的数组成员呢?
【问题讨论】:
标签: c++ arrays constructor