指针的c++矢量以不同的方式进行反推

c++ vector of pointers push back in different way

本文关键字:方式进 c++ 指针      更新时间:2023-10-16

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

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);

矢量VG是否包含指针本身的地址或指针指向的地址?地图呢?

VG包含了您想要的东西——指向车辆对象的指针。

当您调用push_back()时,它会获取您提供的对象(在您的情况下,"对象"是vector*),复制它并将其放入向量中。Vector使用内部内存块来存储对象,所以这就是它需要进行复制的原因。

这两个版本做的是相同的事情。

在第二个版本中,tmp_vehicle首先指向返回的new vehicule(1)。然后将该指针推入向量中,因此向量的第一个元素现在也指向该位置
从另一个角度来看,您没有将tmp_vehicule本身存储在向量中。您正在存储该指针的副本。

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

(如果你没有将指针存储在向量中,那么在第二次分配给tmp_vector之后,你就会出现内存泄漏,因为你会丢失指向第一个车辆的所有指针,所以无法删除它。)