首先,我们有一个指针向量:
vehicleGroup<vehicle*> VG;
在c ++中,是否有区别:
VG.push_back(new vehicle(1));
VG.push_back(new vehicle(2));
和
//tmp_vehicle is a public class member
tmp_vehicle = new vehicle(1);
VG.push_back(tmp_vehicle);
tmp_vehicle = new vehicle(2);
VG.push_back(tmp_vehicle);
vecotr VG是否包含指针本身的地址或指针指向的地址? 地图怎么样?
答案 0 :(得分:3)
VG完全包含您的要求 - 指向车辆对象的指针。
当你致电push_back()
时,它需要你提供的对象(在你的情况下&#34;对象&#34;是vector*
),复制它并将其放到矢量。 Vector使用内部存储器块来存储对象,这就是它需要复制的原因。
答案 1 :(得分:2)
这两个版本做同样的事情。
在您的第二个版本中,tmp_vehicle
首先指向返回的new vehicule(1)
。然后将该指针推入向量,因此向量的第一个元素现在也指向该位置
换句话说,你不是将tmp_vehicule
本身存储在向量中。您正在存储该指针的副本。
然后你让tmp_vehicule
指向别的东西。这不会改变您将指针存储到向量中的第一个位置的事实。它会更改变量指向的内容,但不会以任何方式更改矢量。
(如果你没有将该指针存储在向量中,那么在第二次赋值给tmp_vector
之后你就会有内存泄漏,因为你已经丢失了指向第一个工具的所有指针 - 所以没有删除它的方法。)