C 删除具有内存位置的操作员
C++ delete operator with memory locations
我是C 的新手,现在正在研究new
和delete
关键字。
Point ppaa = *new Point;
Point *p = &ppaa;
ppaa.xpos = 1;
ppaa.ypos= 3;
delete &ppaa;
delete p;
您能解释一下为什么我无法使用& ppaa删除上面的PPAA?我知道删除只能在指针上操作,但是我不明白为什么不可能进行以上,因为它们实际上是内存位置。搜索类似的问题,这似乎与第一行发生的复制操作有关,但我没有很好的解释。
T t = x;
被称为复制初始化。它:
- 它试图将
x
转换为类型T
& - 然后将该对象上的对象复制到定位化对象
t
。
所以您的代码语句,
Point ppaa = *new Point;
- 在freestore/hea和 上创建一个
- 然后将该对象复制以创建堆栈对象
ppaa
。
Point
obejct这两个对象都是不同的对象。
如您所见,执行此语句后,您没有任何指向堆对象的指针。
在这种情况下,您需要将new
返回的地址传达给delete
,因为您没有地址会导致内存泄漏。
此外,请注意,&ppaa
不返回new
返回的地址,它返回堆栈上的对象ppaa
的地址。将此地址传递给delete
导致未定义的行为,因为ppaa
从未分配在freestore/Dynamionally上是基于堆栈的本地/自动对象。
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- <<操作员在下面的行中工作
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 如何在特定位置追加 json 文件
- C 删除具有内存位置的操作员