动态分配的类数组的行为

The behavior of dynamically allocated class array

本文关键字:动态分配 数组      更新时间:2023-10-16

>假设class A有一些动态分配的数据数组,并且class A有一个用户定义的析构函数来释放A分配的内存(RAII 样式(。

那么如果我们创建一个class A的动态数组,我们称之为数组B,并使用标准的free函数来free B声明的资源,我们能保证A中的每个动态数组也都得到了适当的释放吗?

那么当存在BA嵌套类型关系时,情况如何? 释放'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 的构造函数中没有异常。与往常一样,您必须在从malloc/calloc/realloc获得的指针上精确地调用free

这种编写代码的方式疯了吗?绝对。别这样。请改用std::vector<A>