我应该删除 .h 文件中的字符数组吗
Should I delete char arrays in .h files
如何管理 Test.h 中的字符数组 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?
}
我知道当使用 new
或 malloc
时,必须使用 delete
或 free()
释放内存。
是否为 Test
的每个实例在堆栈上分配了字符数组 buffer
,因此不需要删除?
不,您不需要删除它。因此你不需要析构函数(除非你有其他需要释放的资源)
规则很简单:用malloc
/new
/new[]
得到的每个memory/object应该freed/destroyed 一次once与对应的free
/delete
/delete[]
。没什么。仅此而已。
此外,在现代 C++ 中,您很少需要像这样管理内存资源。你会使用 std::vector
或其他容器,或者如果你真的需要指针,你应该使用智能指针,std::unique_ptr
和 std::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]
是封装在 class Test
中的普通字符数组,因此它的 lifetime 与 [=12= 的对象相关联] class 即每当创建 class Test
的对象时,数组的内存将被分配,当对象被销毁时,内存将被释放。
因此,无论你在stack
或heap
(使用new
)上创建Test
class的对象,什么时候对象将被销毁(自动或者使用delete
), array占用的内存会被释放
如何管理 Test.h 中的字符数组 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?
}
我知道当使用 new
或 malloc
时,必须使用 delete
或 free()
释放内存。
是否为 Test
的每个实例在堆栈上分配了字符数组 buffer
,因此不需要删除?
不,您不需要删除它。因此你不需要析构函数(除非你有其他需要释放的资源)
规则很简单:用malloc
/new
/new[]
得到的每个memory/object应该freed/destroyed 一次once与对应的free
/delete
/delete[]
。没什么。仅此而已。
此外,在现代 C++ 中,您很少需要像这样管理内存资源。你会使用 std::vector
或其他容器,或者如果你真的需要指针,你应该使用智能指针,std::unique_ptr
和 std::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]
是封装在 class Test
中的普通字符数组,因此它的 lifetime 与 [=12= 的对象相关联] class 即每当创建 class Test
的对象时,数组的内存将被分配,当对象被销毁时,内存将被释放。
因此,无论你在stack
或heap
(使用new
)上创建Test
class的对象,什么时候对象将被销毁(自动或者使用delete
), array占用的内存会被释放