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

时间:2016-01-01 14:42:45

标签: c++ arrays raii

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

Test.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()释放内存。

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分: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类的对象绑定,即每当类{{}创建1}},将分配数组的内存,当对象被销毁时,将释放内存。

因此,无论是在Test还是Test创建stack类的对象(使用heap),对象都将被销毁(自动或使用{{1} }),数组占用的内存将被释放。