指针的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);
矢量VG是否包含指针本身的地址或指针指向的地址?地图呢?
VG包含了您想要的东西——指向车辆对象的指针。
当您调用push_back()
时,它会获取您提供的对象(在您的情况下,"对象"是vector*
),复制它并将其放入向量中。Vector使用内部内存块来存储对象,所以这就是它需要进行复制的原因。
这两个版本做的是相同的事情。
在第二个版本中,tmp_vehicle
首先指向返回的new vehicule(1)
。然后将该指针推入向量中,因此向量的第一个元素现在也指向该位置
从另一个角度来看,您没有将tmp_vehicule
本身存储在向量中。您正在存储该指针的副本。
然后你让tmp_vehicule
指向其他东西。这不会改变存储指向矢量中第一个位置的指针的事实。它会改变变量指向的内容,但不会以任何方式改变向量。
(如果你没有将指针存储在向量中,那么在第二次分配给tmp_vector
之后,你就会出现内存泄漏,因为你会丢失指向第一个车辆的所有指针,所以无法删除它。)
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- 如何在openssl-ecc中获取十六进制格式的私钥
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 以螺旋方式打印矩阵的程序.(工作不好)
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- clang格式:宏的缩进
- C++setiosflags函数操纵器-未确定的缩进
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 用c++把小数点转换成八进制
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 是否可以更改 Xcode 缩进注释行的方式
- 在十六进制编辑器中写入程序内存,并以编程方式读取