动态分配的类数组的行为

时间:2013-11-19 19:46:02

标签: c++ class memory-leaks

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

然后,如果我们创建一个class A的动态数组,我们可以将其称为数组B,并使用标准的free函数来free B所声明的A资源},我们能否确保B中的每个动态数组都已正确发布?

A'A'存在嵌套类型关系时,情况又如何呢? 'B'被释放后,{{1}} s的所有资源是否都能正常处理?

1 个答案:

答案 0 :(得分:2)

这完全取决于你是如何做到的。这是使用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>