gex*_*ide 2 c++ arrays constructor
我试着编写一个"inline-vector"类来方便地在堆栈中存储大量元素:
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]; }
}
Run Code Online (Sandbox Code Playgroud)
出于效率原因,我希望content
在X
构造函数中没有初始化,即使T
只有一个非平凡的构造函数.如您所见,内容将在以后实际插入,并在实际插入时添加新内容.但是,C++似乎强制要求content
必须在初始化时初始化所有元素X
.例如,这不编译:
struct Y{ Y(int){} }
X<Y> foo; // compile error, no constructor for Y is called in the construction of X
Run Code Online (Sandbox Code Playgroud)
那么,即使数组元素类型需要构造函数,如何使一个未初始化的数组成员成为可能呢?
通过使数组成为char
s 的数组,然后new
放入其中.char
是你唯一允许这样做的类型.
那么,当你在它的时候,你也可以编写自己的分配器(将数组作为其成员之一),并将其插入std::vector
而不是重新发明整个shebang.
std::vector<int, YourAllocatorType<int, 256>> v;
Run Code Online (Sandbox Code Playgroud)