【发布时间】:2020-02-18 08:30:47
【问题描述】:
我刚刚意识到我可以访问我的空对象向量列表的对象成员。 我认为 vector.reserve(nmb) 只是保留所需的内存(一种 nmb*sizeof(object))。
#include <iostream>
#include <vector>
class Car {
public: int tires = 4;
Car(void) {
std::cout << "Constructor of Car" << std::endl;
}
};
int main()
{
std::vector<Car> carList;
carList.reserve(20);
std::cout << "Car tires: " << carList[0].tires << std::endl;
std::cout << "Now comes the emplace_back:" << std::endl;
carList.emplace_back();
std::cout << "Car tires: " << carList[0].tires << std::endl;
//Car carArray[20];
//std::cout << "Car tires: " << carArray[0].tires << std::endl;
return 0;
}
给我:
Car tires: 0
Now comes the emplace_back:
Constructor of Car
Car tires: 4
...Program finished with exit code 0
为什么我可以访问尚未初始化的对象的成员? 谢谢。
【问题讨论】:
-
因为这些对象的内存由
carList.reserve(20);保留在向量中,但是这个内存没有初始化,所以这就是你有thrash值的原因