动态分配的成员变量。重点是什么?
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 容器用于所有其他可能的用途。
仅当您正在编写非常底层的东西或从头开始实现容器时,才使用 new
和 delete
。对于所有其他情况,将动态内存分配(通过 malloc
和 new
)视为已弃用。
我是 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 容器用于所有其他可能的用途。
仅当您正在编写非常底层的东西或从头开始实现容器时,才使用 new
和 delete
。对于所有其他情况,将动态内存分配(通过 malloc
和 new
)视为已弃用。