给定一个人为的示例结构,如下所示:
static const int ARRAY_SIZE = 64;
struct some_struct
{
int buffer_size;
char buffer[ARRAY_SIZE] { 0 };
some_struct(char* str, int str_len) :
buffer_size(ARRAY_SIZE)
{
for (int i = 0; i < str_len; i++)
{
buffer[i] = str[i];
}
}
};
该结构是否需要显式的析构函数来释放数组的内存?我打算在堆栈和堆上使用该结构,即
// Stack
//
char myStr1[] = "string1";
some_struct myStackStruct(myStr1, 6);
...
// Heap
//
char myStr2[] = "string2";
some_struct* myHeapStruct = new some_struct(myStr2, 6);
...
delete myHeapStruct;
是否需要在析构函数中明确销毁此类结构中固定大小的数组?
该结构是否需要显式的析构函数来释放数组的内存?我打算在堆栈和堆上使用该结构,即
您没有在struct声明中编写任何代码来指定堆中的任何内存分配。因此,数组声明不需要显式dtor即可释放内存。
是否需要在析构函数中明确销毁此类结构中固定大小的数组?
一条简单的拇指规则new
和delete
成对出现。delete
每一个永远应该有一个new
。在您的结构声明中,您没有调用new
,因此您无需在dtor中显式销毁它。
但是,以下行将struct的实例放在堆上(因为您正在使用new
)。因此,在这种情况下,您需要使用delete
释放分配的内存。
some_struct* myHeapStruct = new some_struct(myStr2, 6);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句