【问题标题】:Should I delete char arrays in .h files我应该删除 .h 文件中的 char 数组吗
【发布时间】:2016-01-01 14:42:45
【问题描述】:

如何在 Test.h 中管理 char 数组 buffer

测试.h

class Test{
public:
    Test();
    ~Test();

    char buffer[255];
};

Test.cc

#include "Test.h"

Test::Test()
{
}

Test::~Test()
{
    // Do I need to delete/free buffer?
}

我了解当使用newmalloc 时,必须使用deletefree() 释放内存。

char数组buffer是否为Test的每个实例在堆栈上分配,所以不需要删除?

【问题讨论】:

  • 您永远不需要删除任何不是从 new 返回的内容。
  • 请注意,“在标题中”的信息不属于这个问题的任何地方。

标签: c++ arrays raii


【解决方案1】:

不,您不需要删除它。因此,您不需要析构函数(除非您有其他需要释放的资源)

规则很简单:使用malloc/new/new[] 获得的每个内存/对象都应该用对应的free/@987654325 释放/销毁一次 @/delete[]。一点也不差。仅此而已。

此外,在现代 C++ 中,您很少需要像这样管理内存资源。你可以使用std::vector 或其他容器,或者如果你真的需要指针,你应该使用智能指针std::unique_ptrstd::shared_ptr

【讨论】:

    【解决方案2】:
    Is the char array buffer allocated on the stack for
    each instance of Test and so does not need to be deleted?
    

    由于char buffer[255] 是封装在Test 类中的纯字符数组,因此它的生命周期Test 类的对象相关联,即每当创建Test 类的对象时,内存for 数组将被分配,当对象被销毁时,内存将被释放。

    因此,无论是在stack 还是heap(使用new)上创建Test 类的对象,当对象将被销毁(自动或使用delete)时,数组占用的内存将是发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 2019-04-03
      • 2018-07-29
      • 1970-01-01
      相关资源
      最近更新 更多