离开功能后丢失一些数据

Losing some data after leaving function

本文关键字:数据 功能 离开      更新时间:2023-10-16

>我有一个包含这些向量的类:

class MainMenu {
private:
     std::vector <Car> vehicles;
     std::vector <Instructor> instructors;
     std::vector <Trainee> trainees;
     std::vector <Lesson> lessons;
public:
     std::vector<Car>& getVehicles();
     std::vector<Instructor>& getInstructors();
     std::vector<Trainee>& getTrainees();
     std::vector<Lesson>& getLesson();
}
/

/-------------------------------------------------

class Car : public Vehicle {
public:
    static MARKA convertStringToMarka(std::string name);
    Car(std::string numberPlate, MARKA marka, bool roadWorthy);
    Car() {};
    Car(int id,std::string numberPlate, MARKA marka, bool roadWorthy);
};

在代码中的某个地方,我执行这样的功能:

Car *car = mainMenu.searchForCarById(idOfVehicle);
Car* MainMenu::searchForCarById(int id) {
     for (Car elem : vehicles) {
         if (elem.getIdInSystem() == id) {
             return &elem;
         }
    }
}
在调试时,我

逐步执行此代码,这只是函数正确搜索汽车,但每当我从功能返回时,每个字符串的变量都会消失。例如name变量中,我收到"".我认为值得一提的是,只有字符串消失了!int保持原样。我做错了什么?

更改此行

for (Car elem : vehicles)

for (Car& elem : vehicles)

否则,您将保存指向超出范围的局部变量的指针,因此会针对悬空指针工作

for (Car elem : vehicles)

elem 是包含在 vehicles 中的实际对象的副本。然后返回指向此本地对象的指针,该指针被销毁,使其悬而未决。解决方法是改用Car&

当您循环通过车辆时,以下行:

for (Car elem : vehicles)

制作每个元素的副本并将其存储在 elem 中。

相反,请尝试通过引用获取元素:

for (Car& elem : vehicles)

然后,您实际上可以得到一个指针。但是,一旦您修改数组,此指针可能会变得无效。所以它仍然不是最佳的。