我想创建一个数组,其中包含指向多个对象的指针,但是我事先不知道要保存的对象数,这意味着我需要为该数组动态分配内存。我想到了下一个代码:

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/

10-10 16:36