像这样使用'删除'是否可以释放原始分配的内存?

时间:2013-07-13 11:53:36

标签: c++

class A {
    struct structA;
}

其他地方:

structA* structAPointer = new structA;

遥远的土地:

void Wonderland::rabbitHole(structA* structAPointer) {
    delete structAPointer;
}

删除操作符是否释放了“其他地方”中分配的原始内存?

2 个答案:

答案 0 :(得分:6)

无论分配的代码部分是什么,delete

创建的任何内容都会new删除

虽然delete []适用于由new []创建的内容。

但是,通常您希望创建它的部分负责删除它,以便更轻松地管理内存。

答案 1 :(得分:0)

  

删除操作符是否释放了“其他地方”中分配的原始内存?

是的,如果 原始 structAPointer从未被修改过,并且传递给rabbitHole

delete运算符处理包含指针的变量的值(地址),因此实际上有任何阻止您在已经使用dinamically分配的任何rabbitHole上使用structA*的内容。< / p>

可以说, C ++社区强烈反对使用newdelete(或new[]delete[]。有a lot of alternatives来处理动态分配的内存,这些内存被证明可以更好地工作。例如,std库拥有very good set of utilities来帮助您管理动态内存,而无需自己处理指针。