【问题标题】:Does using 'delete' like this free up the original allocated memory?像这样使用“删除”会释放原始分配的内存吗?
【发布时间】:2013-07-13 11:53:35
【问题描述】:
class A {
    struct structA;
}

其他地方:

structA* structAPointer = new structA;

遥远的土地:

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

delete 操作符是否释放在“Somewhere else”中分配的原始内存?

【问题讨论】:

  • 如果rabbitHole 是用原来的structAPointer 调用的,是的。
  • @Jeffrey 指针不应该通过引用传递吗?
  • @0x499602D2,不是真的。 delete 运算符释放内存地址,而不是保存它的变量。

标签: c++


【解决方案1】:

不管分配给它的代码的哪一部分删除都会deletenew创建的任何东西

delete [] 是由new [] 创建的东西。

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

【讨论】:

    【解决方案2】:

    delete 操作符是否释放在“Somewhere else”中分配的原始内存?

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

    delete 运算符作用于保存指针的变量的值(地址),因此确实有任何事情阻止您在动态分配的任何 structA* 上使用 rabbitHole

    也就是说,C++ 社区非常不鼓励使用newdelete(或new[]delete[])。有a lot of alternatives 来处理动态分配的内存,这些内存被证明可以更好地工作。例如,std 库包含一个 very good set of utilities 来帮助您管理动态内存,而无需自己处理指针。

    【讨论】:

    • 你能给我举个例子来说明人们通常是如何做事的吗?我只是将编码作为一种爱好,并不真正了解管理内存的“标准”方法。
    • @Hobbyist,std 库提供了多种类型的智能指针。它们的使用实际上取决于您的应用程序的上下文。我在答案中的维基百科链接包含对差异的简要说明。有关其他任何内容,请查看 cpp 参考网站的其他链接。
    • 如果我想将在函数链中创建的指针传递给其他几个函数,并且只在函数链的末尾销毁,您建议我使用什么指针?跨度>
    • @Hobbyist,可能是std::shared_ptr
    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多