我想创建一个包含指向许多对象的指针的数组,但我事先并不知道我将持有的对象数,这意味着我需要为数组动态分配内存.我想到了下一个代码:
ants = new *Ant[num_ants];
for (i=1;i<num_ants+1;i++)
{
    ants[i-1] = new Ant();
}
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());
}
如果你必须使用动态分配的数组,那么我更喜欢这种语法:
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);
| 归档时间: | 
 | 
| 查看次数: | 55402 次 | 
| 最近记录: |