指针的c ++向量以不同的方式向后推

时间:2015-02-22 08:51:04

标签: c++ pointers

首先,我们有一个指针向量:

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是否包含指针本身的地址或指针指向的地址? 地图怎么样?

2 个答案:

答案 0 :(得分:3)

VG完全包含您的要求 - 指向车辆对象的指针。

当你致电push_back()时,它需要你提供的对象(在你的情况下&#34;对象&#34;是vector*),复制它并将其放到矢量。 Vector使用内部存储器块来存储对象,这就是它需要复制的原因。

答案 1 :(得分:2)

这两个版本做同样的事情。

在您的第二个版本中,tmp_vehicle首先指向返回的new vehicule(1)。然后将该指针推入向量,因此向量的第一个元素现在也指向该位置 换句话说,你不是将tmp_vehicule本身存储在向量中。您正在存储该指针的副本。

然后你让tmp_vehicule指向别的东西。这不会改变您将指针存储到向量中的第一个位置的事实。它会更改变量指向的内容,但不会以任何方式更改矢量。

(如果你没有将该指针存储在向量中,那么在第二次赋值给tmp_vector之后你就会有内存泄漏,因为你已经丢失了指向第一个工具的所有指针 - 所以没有删除它的方法。)