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

时间:2016-05-25 10:44:24

标签: c++ dynamic allocation

我对C ++完全陌生。我想询问以下内容。

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

我找不到明确解决此问题的任何来源。

3 个答案:

答案 0 :(得分:3)

动态分配成员的原因是

  • 数组的大小可能是非常数
  • 该成员可能非常大,因此堆栈中没有足够的内存
  • 该成员具有多态性,由MSalters评论

但是,正如Alf在评论中指出的那样,最好使用智能指针。这样做的好处是,您不需要在析构函数中明确delete该成员,并且在shared_ptr的情况下,您可以根据需要延长生命周期,智能指针需要注意破坏。

答案 1 :(得分:2)

  

是否应该在析构函数中删除它?

不是必需的 - 如果你确定它不会被进一步使用,你可以在其他功能完成工作后立即释放内存。但是,你必须从析构函数中调用这个破坏例程,以避免内存泄漏。理想情况下,您还需要为function filterTextarea() { var textarea = document.getElementById('textarea'); var matches = textarea.value.match(<THE REGEX FOR THE WORDS YOU WANT TO FILTER>); if (matches) { alert('Hey, no bad words!'); textarea.value = ''; return; } // Other stuff. } 内存提供另一个函数。

简而言之,这一切都取决于你的班级以及你在实施什么。

答案 2 :(得分:1)

让我采取一些后现代的方法并说“你不必再担心它了”

如果只有creation-object是该资源的使用者,则使用unique_ptr,如果许多对象共享该资源,请使用shared_ptr。使用STL容器进行所有其他可能的用途。

只有在编写极低级别的内容或从头开始实现容器时才使用newdelete。对于所有其他情况,请将动态内存分配(通过mallocnew)视为已弃用。