在没有调用构造函数的对象数组中分配内存?

Ant*_*ndo 0 c++ arrays

我想创建一个简单的模板arraylist类,但是当我做类似的事情

T* typeArray = new T[10];
Run Code Online (Sandbox Code Playgroud)

这将创建10个对象实例,调用构造函数10次.我怎样才能创建一个空数组,我以后可以放置对象?

Mat*_*ips 5

它不是用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).只有在这种方式构建之后才能[]合法化索引.作为警告,[]即使非法,索引也可能有效,但它是未定义的行为.