我想创建一个数组,其中包含指向多个对象的指针,但是我事先不知道要保存的对象数,这意味着我需要为该数组动态分配内存。我想到了下一个代码:
ants = new *Ant[num_ants];
for (i=1;i<num_ants+1;i++)
{
ants[i-1] = new Ant();
}
其中
ants
定义为Ant **ants;
,而Ant
是一个类。能行吗
最佳答案
是。
但是,如果可能,应使用 vector :
#include <vector>
std::vector<Ant*> ants;
for (int i = 0; i < num_ants; ++i) {
ants.push_back(new Ant());
}
如果必须使用动态分配的数组,则我更喜欢以下语法:
typedef Ant* AntPtr;
AntPtr * ants = new AntPtr[num_ants];
for (int i = 0; i < num_ants; ++i) {
ants[i] = new Ant();
}
但是,忘记所有这些。该代码仍然不好用,因为它需要手动进行内存管理。要解决此问题,您可以将代码更改为:
std::vector<std::unique_ptr<Ant>> ants;
for (auto i = 0; i != num_ants; ++i) {
ants.push_back(std::make_unique<Ant>());
}
最好的就是:
std::vector<Ant> ants(num_ants);
关于c++ - 创建对象指针数组C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5887615/