gpt4 book ai didi

C++:释放动态数组(结构成员)和指向该结构的指针的方法

转载 作者:行者123 更新时间:2023-11-27 23:47:05 26 4
gpt4 key购买 nike

全部。假设我们有一个指向结构的指针,它有一个动态数组成员(在其他成员中)。

我可以释放所有对象,但希望您对针对此特定情况的最佳实践提出意见。请参阅下面的代码,它编译并运行时没有段错误:

#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 , 这有点不确定,因为大多数建议都被认为是理所当然的工作,但其中很多都存在段错误。

我已经简化了问题,因为我将使用的数组是 3D。如果无法在析构函数中释放 100% 的内存,那么我准备使用一种方法来运行循环以释放数组内存和指向结构的指针。所以我想知道您对这种具体情况的看法。

最佳答案

由于您使用的是 C++ 和动态数组,std::vector , std::array ,或者,例如 std::unique_ptr比直接使用 new 更好的处理方法。

关于C++:释放动态数组(结构成员)和指向该结构的指针的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49711611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com