动态分配的类数组的行为
The behavior of dynamically allocated class array
>假设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
的构造函数中没有异常。与往常一样,您必须在从malloc
/calloc
/realloc
获得的指针上精确地调用free
。
这种编写代码的方式疯了吗?绝对。别这样。请改用std::vector<A>
。
相关文章:
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 动态更改数组的大小并读取值.(无矢量)
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 动态维度数组的 C++ 别名指针
- C++ 在析构函数调用之前删除的动态成员数组
- 从类 c++ 动态创建数组
- 具有静态 std::array 的神经网络比使用动态 C 数组的神经网络慢
- "Error reading character of string" 为哈希动态增长数组的问题 (C++)
- 为什么我们在传递动态 2D 数组时不需要列数?
- 如何解决在使用动态 2D 数组进行矩阵乘法的 MPI 进行并行编程时的问题
- 使用动态布尔数组时出现问题
- C++ 在类中删除动态 2D 数组时不断"Aborted (core dumped)"
- 如何在C 中动态输入数组
- 关于删除动态对象数组
- 在C 中动态更改数组大小
- 使用动态指针数组进行动态对象分配 - 使用什么删除?
- 动态字符串数组分配错误
- 函数中的动态 2D 数组分配并将其返回给主数组
- c++动态字符串数组分配
- 使用字符串或字符动态分配(数组)