创建一个对象指针数组C++

SIM*_*MEL 11 c++ new-operator

我想创建一个包含指向许多对象的指针的数组,但我事先并不知道我将持有的对象数,这意味着我需要为数组动态分配内存.我想到了下一个代码:

ants = new *Ant[num_ants];
for (i=1;i<num_ants+1;i++)
{
    ants[i-1] = new Ant();
}
Run Code Online (Sandbox Code Playgroud)

where ants定义为Ant **ants;Ant是一个类.

它会起作用吗?

Sta*_*ked 22

它会起作用吗?

是.

但是,如果可能,您应该使用向量:

#include <vector>

std::vector<Ant*> ants;
for (int i = 0; i < num_ants; ++i) {
    ants.push_back(new Ant());
}
Run Code Online (Sandbox Code Playgroud)

如果你必须使用动态分配的数组,那么我更喜欢这种语法:

typedef Ant* AntPtr;
AntPtr * ants = new AntPtr[num_ants];
for (int i = 0; i < num_ants; ++i) {
    ants[i] = new Ant();
}
Run Code Online (Sandbox Code Playgroud)

但忘记这一切.代码仍然没有任何好处,因为它需要手动内存管理.要解决此问题,您可以将代码更改为:

std::vector<std::unique_ptr<Ant>> ants;
for (auto i = 0; i != num_ants; ++i) {
    ants.push_back(std::make_unique<Ant>());
}
Run Code Online (Sandbox Code Playgroud)

最重要的是这个:

std::vector<Ant> ants(num_ants);
Run Code Online (Sandbox Code Playgroud)