Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;没有初始化的数组成员_C++_Arrays_Constructor - Fatal编程技术网

C++ C++;没有初始化的数组成员

C++ C++;没有初始化的数组成员,c++,arrays,constructor,C++,Arrays,Constructor,我试图编写一个“内联向量”类,以便在堆栈上方便地存储大量元素: 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<t

我试图编写一个“内联向量”类,以便在堆栈上方便地存储大量元素:

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]; }


}

因此,即使数组元素类型需要构造函数,如何使数组成员未初始化?

方法是将数组设置为字符数组,然后将其放入新的
char
是唯一允许您使用的类型

因此,当您正在使用时,您不妨编写自己的分配器(将数组作为其成员之一),并将其插入
std::vector
,而不是重新发明整个shebang

std::vector<int, YourAllocatorType<int, 256>> v;
std::vector v;
那么,即使数组元素类型需要构造函数,怎么可能有一个未初始化的数组成员呢


它不适用于
tx[n]
。。。但您可以将任何旧的
T*
指向正确对齐的未初始化内存,然后管理您自己的特殊构造和销毁。您还可以探索使用您的类型创建一个
联合
,说一个
字符
,并使用分配器创建一个联合数组……

有趣的想法。感谢您给出了使用
char
数组的实际答案,因为分配器会遇到与向量相同的问题。似乎没有办法绕过
char
数组,无论是编写分配器还是向量。@gexicide:是的,不是真的:)我不认为
union
可以用于具有非平凡构造函数的成员。但这是不必要的;char数组和cast很好,只要其中一个类型是
char
,就定义得很好。@JanHudec:该类型有一些限制,但我相信对于C++11,这些限制已经大大放宽了。。。当然要记住一点。我自己现在没有时间去挖掘确切的细节。。。。
std::vector<int, YourAllocatorType<int, 256>> v;