【发布时间】:2018-04-07 20:18:20
【问题描述】:
全部。 假设我们有一个指向结构的指针,该结构的成员是一个动态数组(以及其他成员)。
我可以释放所有对象,但希望您对针对这种特定情况的最佳做法提出意见。请参阅下面的代码,它可以编译并运行而不会出现分段错误:
#include <iostream>
struct TestStruct
{
int a; // And other members here
int *b = new int[10];
~TestStruct()
{
}
};
int main(void)
{
struct TestStruct *a_struct = new TestStruct();
// Do something with the struct
delete[] a_struct->b;
delete a_struct;
return 0;
}
这样我假设内存被正确返回。但是,如果我将这些删除中的任何一个移动到析构函数中,就会出现段错误。也就是说,如果我将数组删除移动到析构函数(delete[] a_struct->b;),它不再可访问,因为我之前删除了指向该结构的指针(delete a_struct;),反之亦然,就会发生内存泄漏。
在阅读了这个帖子C++ free all memory used by struct之后,有点不确定,因为大多数建议都被认为是理所当然的工作,但其中许多存在segfault。
我已经简化了问题,因为我将使用的数组是 3D。如果无法在析构函数中释放 100% 的内存,那么我准备使用一种方法来运行循环以释放数组内存和指向结构的指针。所以我想知道你对这种特殊情况的看法。
【问题讨论】:
-
使用
std::array或std::vector。
标签: c++ arrays memory struct raii