如何管理对象的指针数组?

0 c++ arrays pointers object

我有一个指向对象的数组的问题:( ..

我需要生成一个动态的对象向量,然后返回它以便在另一个类中操作它.在下面的代码中,有一个抽象的Event类和从它继承并可以实例化的CarArrival.

在生成和填充数组的类中,我有这个函数:

Event** EventGenerator::getEvents() {

Event* cars[EVENTS];

for (int i=0; i<EVENTS; i++) {
    cars[i] = new CarArrival(generator->getNextNumber(8,(float)sqrt(0.4)));
}

sort(cars, cars+(EVENTS), Event::cmp);

return cars;
Run Code Online (Sandbox Code Playgroud)

}

我以这种方式在onther类中调用此函数:


Event** cars = generator->getEvents();

for(int i=0; i<EVENTS; i++) {
    cout << i <<":" << (*cars)[i]->getScheduleTime() << endl;
}
Run Code Online (Sandbox Code Playgroud)

打印完第一个元素后,我得到"分段错误".

我已经在线阅读了一些内容,我明白我错了,因为(*cars)评估指向数组的第一个元素的指针,实际上我可以打印第一个元素而不是另一个,但我无法弄清楚如何访问第二类中数组的每个元素.

我怎么能面对这个?

谢谢大家,

阿尔贝托

Con*_*ius 5

我建议你std::vector<Event*>改用.你会以这种方式省去很多痛苦.它在后台处理所有令人讨厌的内存管理,您可以轻松地将任意数量的项目放入其中.你的情况最好的部分是,你可以简单地returnvector这是不符合正常的阵列安全.

此外Event* cars[EVENTS];,您的功能在本地声明.完成后,它将不再存在,这可能会导致您的Segfault.您必须动态分配数组new,但仍然可以尝试使用std::vector,请参阅此处文档.

编辑:样本用法:

std::vector<Event*> EventGenerator::getEvents() {
    std::vector<Event*> cars;
    for (int i=0; i<EVENTS; i++) {
        cars.push_back(new CarArrival(generator->getNextNumber(8,(float)sqrt(0.4))));
    }

    sort(cars.begin(), cars.end(), Event::cmp);

    return cars;
}
Run Code Online (Sandbox Code Playgroud)
std::vector<Event*> cars = generator->getEvents();

for(int i=0; i<cars.size(); i++) {
    cout << i <<":" << (*cars)[i]->getScheduleTime() << endl;
}
Run Code Online (Sandbox Code Playgroud)