离开功能后丢失一些数据
Losing some data after leaving function
>我有一个包含这些向量的类:
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)
然后,您实际上可以得到一个指针。但是,一旦您修改数组,此指针可能会变得无效。所以它仍然不是最佳的。
相关文章:
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 如何使用CAPL的诊断功能获取CAN传输的数据(256字节)?
- 私有成员数据不可用于公共成员功能
- 在C 中,是否有树木数据结构具有相似的功能
- 当使用嵌套类功能时,使用非静态数据成员的使用无效,但是当函数未固定时可以
- 为什么指定数据类型而不是构造功能参数?C
- C 尝试使用模板输出功能来显示不同类型的数据
- 访问嵌套结构的数据成员并将结构传递到功能C
- 离开功能后丢失一些数据
- 编译器生成的移动成员在静态数据成员上功能
- 我正在尝试使用朋友功能,但我无法访问第二类的私人数据成员
- 关于Lambdas,转换以功能指针以及私人数据成员的可见性
- 固定功能如何访问类数据成员
- 正确的方法将功能限制为特定数据类型
- 如何制作具有同步数据读/写功能的多客户端服务器
- 解析一般CSV读取功能时,如何处理不同的数据类型?(不明确指定它们)
- 调用C 功能,其中包含来自C的STL数据类型
- 插入功能指向新数据
- 如何将功能和数据从一个涡轮C 程序访问到另一个涡轮增压程序
- 将const数据传递到无需const_cast的非const的功能