我应该删除.h文件中的字符数组吗

Should I delete char arrays in .h files

本文关键字:字符 数组 删除 文件 我应该      更新时间:2023-10-16

如何在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()释放内存。

是否在堆栈上为Test的每个实例分配了字符数组buffer,因此不需要删除?

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

规则很简单:用malloc/new/new[]获得的每个内存/对象都应该被释放/销毁一次,而用相应的free/delete/delete[]只释放/销毁一个。一点也不差。没什么了。

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

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的对象时,将分配数组的内存,当对象被破坏时,将释放内存。

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