C++ 我应该删除.h文件中的字符数组吗
如何管理Test.h中的字符数组C++ 我应该删除.h文件中的字符数组吗,c++,arrays,raii,C++,Arrays,Raii,如何管理Test.h中的字符数组缓冲区 测试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? } 我知道当使用new或malloc时,必须使用delete或free()释放内存 是否在堆栈上为每个T
缓冲区
测试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?
}
我知道当使用new
或malloc
时,必须使用delete
或free()
释放内存
是否在堆栈上为每个Test
实例分配了字符数组buffer
,因此不需要删除它?否,不需要删除它。因此,您不需要析构函数(除非您有其他需要释放的资源)
规则很简单:使用malloc
/new
/new[]
获得的每个内存/对象都应该被释放/销毁一次,并且只能被释放/销毁一次,并使用相应的free
/删除/删除[]
。同样如此。没别的了
也,在现代C++中,你很少需要像这样管理内存资源。您可以使用
std::vector
或其他容器,或者如果确实需要指针,则应该使用智能指针、std::unique\u ptr
和std::shared\u 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
的对象被创建时,数组的内存将被分配,当对象被销毁时,内存将被释放
因此,无论您是在堆栈上创建Test
类的对象,还是在堆上创建类的对象(使用new
),当对象将被销毁时(自动或使用delete
),数组占用的内存都将被释放。您永远不需要删除任何未从new返回的内容。请注意:“在标题中”不属于这个问题的任何地方。