假设如果 class A
有一些动态分配的数据数组,并且 class A
有一个用户定义的析构函数来释放 A
分配的内存>(RAII 风格)。
然后,如果我们创建一个 class A
的动态数组,我们将其称为数组 B
,并使用标准的 free
函数来 free
资源被B
占用,我们能否确保A
中的每个动态数组也已被正确释放?
当B
和A
存在嵌套关系时,情况又如何呢? 'B'
被释放后,'A'
的所有资源能否正确销毁?
最佳答案
这完全取决于你如何做。这是使用 free
的一种非常明智的方法:
char * addr = static_cast<char *>(std::malloc(sizeof(A) * 2));
A * p = new (addr) A(100);
A * q = new (addr + sizeof(A)) A(50);
q->~A();
p->~A();
std::free(addr); // fine
这不会泄漏内存,前提是 A
的构造函数中没有异常。 .一如既往,您必须调用 free
恰好在从 malloc
获得的指针上/calloc
/realloc
.
这种写代码的方式是不是很疯狂?确实。不要这样做。使用 std::vector<A>
相反。
关于c++ - 动态分配类数组的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20080646/