将对象添加到指向对象

时间:2016-11-02 16:41:38

标签: c++ arrays pointers

我有将对象添加到对象指针数组的问题。这是我将要谈论的一个功能:

void add(Car **cars, int number) {
    Car *fresh = new Car;
    fresh = new Car;
    cout << "Enter the name of your car." << endl;
    cin >> fresh->name;
    cout << "Enter max velocity of your car." << endl;
    cin >> fresh->maxV;
    cout << "Enter weight of your car." << endl;
    cin >> fresh->weight;
    delete[number-1] cars;
    cars[number-1] = fresh; // here's something wrong
}

我在指针数组number中分配了**cars个汽车的内存,然后我尝试在数组末尾添加新对象fresh,首先删除最后一个索引中的内存对象的指针数组,然后传递引用到数组的最后一个索引,但是我得到一个错误。我试图自己解决问题,因为我没有在网上找到类似的话题。我希望有人能指导我如何解决它。谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

无需删除声明。如果您已经为“汽车”分配了内存,那么代码将是这样的。

Car *fresh = new Car;
cars[number-1] = fresh; //number here should be index starting from 1 not number of Car objects

在调用方法add()之前,汽车会像下面这样初始化。

Car ** cars = new (Car *)[number]; 

答案 1 :(得分:0)

如果您需要删除cars[number-1]使用

的已分配内存
delete cars[number-1];

否则,您无需再次拨打new来分配fresh。 所以,以下应该有效

void add(Car **cars, int number) {
  Car *fresh = new Car;

  cout << "Enter the name of your car." << endl;
  cin >> fresh->name;

  delete cars[number-1];
  cars[number-1] = fresh; 
}

并且您需要确保number是您的汽车数组的大小。

答案 2 :(得分:-1)

如果你使用

可能会更好
std::vector<Car> cars;

所以你可以做下一个:

cars.push_back(fresh);

就是这样。抱歉我的英文