3
class A {
    struct structA;
}

别的地方:

structA* structAPointer = new structA;

遥远的土地:

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

删除运算符是否释放在“其他地方”中分配的原始内存?

4

2 回答 2

6

分配它删除的代码的哪一部分delete无关紧要new

whiledelete []用于由new [].

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

于 2013-07-13T11:55:05.590 回答
0

删除运算符是否释放在“其他地方”中分配的原始内存?

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

delete运算符处理保存指针的变量的值(地址),因此实际上有任何东西阻止您在您动态分配的rabbitHole任何东西上使用。structA*

就是说,尽管如此,C++ 社区非常不鼓励使用newand delete(或new[]and ) 。有很多替代方法可以处理动态分配的内存,这些方法被证明效果更好。例如,该库包含一组非常好的实用程序来帮助您管理动态内存,而无需自己处理指针。delete[]std

于 2013-07-13T14:13:34.213 回答