c++ - 动态分配类数组的行为

标签 c++ class memory-leaks

假设如果 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 的构造函数中没有异常。 .一如既往,您必须调用 free恰好在从 malloc 获得的指针上/calloc/realloc .

这种写代码的方式是不是很疯狂?确实。不要这样做。使用 std::vector<A>相反。

关于c++ - 动态分配类数组的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20080646/

相关文章:

c++ - 具有不同模板参数的相同类不能访问彼此的私有(private)字段

oop - 在类中使用 getter-setter

python - 迭代器对象、PyCapsules 和内存性能

c++ - 为什么拥有复制构​​造函数会导致此代码中断?

c++ - 为什么 basic_stringbuf 和 basic_filebuf 移动构造函数具有实现定义的行为?

c++ - 在类中初始化时 C++ 中奇怪且不正确的数组大小行为

JavaScript 堆内存是不变的,但是浏览器进程私有(private)字节在增长。内存差异从何而来?

android - 我的游戏有内存泄漏

c++ - 如何检测 boost tcp 套接字何时断开连接

c++ - 基于模板的设计意见