class A {
struct structA;
}
其他地方:
structA* structAPointer = new structA;
遥远的土地:
void Wonderland::rabbitHole(structA* structAPointer) {
delete structAPointer;
}
删除操作符是否释放了“其他地方”中分配的原始内存?
答案 0 :(得分:6)
无论分配的代码部分是什么,delete
new
删除
虽然delete []
适用于由new []
创建的内容。
但是,通常您希望创建它的部分负责删除它,以便更轻松地管理内存。
答案 1 :(得分:0)
删除操作符是否释放了“其他地方”中分配的原始内存?
是的,如果 原始 structAPointer
从未被修改过,并且传递给rabbitHole
。
delete
运算符处理包含指针的变量的值(地址),因此实际上有任何阻止您在已经使用dinamically分配的任何rabbitHole
上使用structA*
的内容。< / p>
可以说, C ++社区强烈反对使用new
和delete
(或new[]
和delete[]
) 。有a lot of alternatives来处理动态分配的内存,这些内存被证明可以更好地工作。例如,std
库拥有very good set of utilities来帮助您管理动态内存,而无需自己处理指针。