我想创建一个简单的模板arraylist类,但是当我做类似的事情
T* typeArray = new T[10];
Run Code Online (Sandbox Code Playgroud)
这将创建10个对象实例,调用构造函数10次.我怎样才能创建一个空数组,我以后可以放置对象?
它不是用C++做事的首选方式,但是
T* my_array = (T*)malloc(10 * sizeof(T));
Run Code Online (Sandbox Code Playgroud)
更符合标准C++实践的解决方案是
std::vector<T> my_vector;
my_vector.reserve(10);
Run Code Online (Sandbox Code Playgroud)
注意,(如评论中所提到的)解决方案的reserve
不同之处在于,如果没有进一步的操作,my_vector[5]
则无效my_array[5]
.您随后将需要类似的东西my_vector.resize(10)
来索引它,这将构建所有10个项目.您可以通过执行push_back(T const&)
或者前后构造它们emplace_back(Args...&& args)
.只有在这种方式构建之后才能[]
合法化索引.作为警告,[]
即使非法,索引也可能有效,但它是未定义的行为.