指针的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 在存储对象的地方使用内部内存块,所以这就是它需要制作副本的原因。
首先我们有一个指针向量:
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 在存储对象的地方使用内部内存块,所以这就是它需要制作副本的原因。