【问题标题】:Do I have to delete struct pointer manually in C++?我必须在 C++ 中手动删除结构指针吗?
【发布时间】:2015-03-08 20:50:43
【问题描述】:

有人告诉我,我不一定要手动删除结构指针。
据我了解,您必须delete 分配给new 的所有内容,甚至是结构,对吗?

【问题讨论】:

  • 是的,没错。有人错了。
  • 是的。但这里有一个提示:如果您使用名为unique_ptr 的东西,您不必担心新建和删除。谷歌它;^)
  • @tux3 我想说你不必担心delete,但你已经需要使用new。例如:std::unique_ptr<A> p(new A);
  • @j.a.谢天谢地,我们现在有了 make_unique
  • 是的,从 C++14 开始。所以,你在技术上是对的。

标签: c++ memory struct


【解决方案1】:

对,你必须。 与其他所有事情一样,如果您为某事分配了内存,则您有责任释放它。

【讨论】:

    【解决方案2】:

    您可以使用智能指针,例如std::unique_ptr。当结构的对象被销毁时,它会调用自己的删除器。

    否则,如果结构是指针的所有者,您确实必须调用 operator delete 或 delete []。

    【讨论】:

      【解决方案3】:

      当然,当您new 任何类型(intchar、...、MyClassMyStruct)时,您会保留一些内存,因此您需要稍后自己释放它。

      delete 用于任何new

      delete[] 对于任何new[] ...

      【讨论】:

        【解决方案4】:

        一般来说,对于每个 new,您需要一个 delete,对于每个 new []delete [],对于每个 fopen 和所有其他变体都需要一个 fclose

        不过,如果您将其委托给智能指针,例如 unique_ptrshared_ptr,您不必自己编写它。
        无论如何,您应该按照一般原则这样做!

        此外,实际上在某些情况下从不取消分配是合适的,例如,如果您存储了一些数据,则必须保留到程序结束,除非析构函数做了一些重要的事情。

        其实,房子拆了也不必费心去扫地毯,而且会对性能产生负面影响,很容易变得大到无法接受。
        想一想“来这里(进入页面),这样我就可以解雇你(免费)。”似乎有点无意义甚至恶意。

        【讨论】:

          猜你喜欢
          • 2019-02-01
          • 2012-01-22
          • 2021-10-18
          • 2012-04-22
          • 2011-10-04
          • 1970-01-01
          • 2017-03-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多