动态分配的成员变量。重点是什么?

Dynamically allocated member variable. What's the point?

我是 C++ 的新手。我想请教以下问题

如果在构造函数中动态分配成员变量。它应该总是在析构函数中删除吗?如果是这样,那么变量的生命周期如何 "elongated"?如果不是,内存泄漏应该如何处理?

我找不到任何来源来明确解决这个问题。

动态分配成员的原因是

  • 数组的大小可能是非常数
  • 成员可能非常大,以至于堆栈上没有足够的内存
  • 该成员是多态的,正如 MSalters 评论的那样

但是,正如 Alf 已经在评论中指出的那样,最好使用智能指针。这样做的好处是您不需要在析构函数中显式 delete 该成员,并且在 shared_ptr 的情况下,您可以根据需要延长生命周期,智能指针会处理毁灭.

Should it always be deleted in destructor?

不是必需的 - 如果您确定不会再使用它,您可以在其他函数完成工作后立即释放内存。但是,您无论如何都必须从析构函数中调用这个销毁例程,以避免内存泄漏。理想情况下,您还需要为 ReAllocate 内存提供另一个功能。

简而言之,这完全取决于您的 class 以及您在实施什么。

让我采用一些 post 现代方法并说 "you don't have to worry about it anymore"

如果只有创建对象负责该资源,则使用 unique_ptr,如果许多对象共享该资源,则使用 shared_ptr。将 STL 容器用于所有其他可能的用途。

仅当您正在编写非常底层的东西或从头开始实现容器时,才使用 newdelete。对于所有其他情况,将动态内存分配(通过 mallocnew)视为已弃用。