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

c++ vector of pointers push back in different way

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

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 包含指针本身的地址还是指针指向的地址? 地图呢?

两个版本做同样的事情。

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

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

(如果你没有将该指针存储在向量中,你会在第二次分配给 tmp_vector 后发生内存泄漏,因为你会丢失所有指向第一辆车的指针 -所以没有办法删除它。)

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

当您调用 push_back() 时,它获取您提供的对象(在您的情况下 "object" 是 vector*),复制它并将其放入 vector。 Vector 在存储对象的地方使用内部内存块,所以这就是它需要制作副本的原因。