gpt4 book ai didi

c++ - C++中多个 vector 内的对象ID不一致

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:46 24 4
gpt4 key购买 nike

这里只是初学者。

我试图将一些对象存储在一个 vector 中,这样我可以稍后循环它,但是之后引用发生了变化,我不确定发生了什么

代码如下;

#include <iostream>
#include <vector>

using namespace std;

class Car;

class Garage {
public:
vector<Car*> vCar;

};

class Car {
public:
short id;
};

int main()
{
Garage garage;
short i;

for(i = 0; i < 10; i++) {
Car car;
car.id = i;

garage.vCar.push_back(&car);
}

for(i = 0; i < garage.vCar.size(); i++) {
cout << i << " " << garage.vCar[i]->id << endl;
// output 9,9,9,..9 instead of 1,2,3,4...10, why is that?
}


return 0;
}

最佳答案

  vector<Car*> vCar;

是一个 vector ,用于存储指向 Car 对象的指针。

 for(i = 0; i < 10; i++) {
Car car;
car.id = i;

garage.vCar.push_back(&car);
}

在上面的 for 循环中,您在堆栈上创建了 Car 对象。到 for 循环结束时,这些对象超出范围并将被销毁。因此, vector 中的指针指向一些不存在的对象。您的代码中有未定义的行为

您可以直接存储对象,它存储原始对象的拷贝。你可以找到一个 Live Demo在这里。

关于c++ - C++中多个 vector 内的对象ID不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17356791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com