在 C++ 中,使用 C 数组而不是std::vector
. 至少在 C++03 中,为数不多的令人信服的原因之一是不可能使用向量来分配未初始化的对象数组。“填充”构造函数std::vector
是:
vector(size_type count, const T& value = T())
意思是...
int* array = new array[1000000];
可能比:
std::vector<int> v(1000000);
...因为向量构造函数必须对整数数组进行零初始化。因此,当使用 POD 向量时,没有真正的等价于malloc
; 你能得到的最好的就是calloc
.
C++11 似乎用“值初始化”的概念改变了这一点。在 C++11 中,std::vector
有一个新的构造函数,它采用单个size_type
值,没有默认参数。这“值初始化”了向量中的所有元素。C++11 标准区分“值初始化”和“零初始化”。
我的理解是“值初始化”相当于在T
. 如果T
是类似的 POD 类型int
,则默认构造函数只是创建一个未初始化的整数。因此,在 C++11 中,explicit vector::vector(size_type count)
真正等同于malloc
if T
is a POD。
但是,我对此的理解是基于草案C++11 标准,而不是最终标准。
问题:我的理解在这里正确吗?如果是 POD ,是否explicit vector::vector(size_type count)
提供未初始化的数组(类似于)?malloc
T