析构函数是否会自动调用 delete[] C++?
Do destructors automatically call delete[] in C++?
析构函数会自动调用C++delete[]
吗?
例如:
class A
{
int *num;
A()
{
num=new int[5];
}
~A() {}
}
我必须将delete[]
添加到~A()
中吗?
他们没有。如果您希望动态分配的int
数组在销毁A
时自动销毁,则使用std::vector<int>
(如果大小固定,则std::array<int, 5>
(而不是int
指针可能是一个不错的选择。
No.您需要在析构函数中调用delete[] num
以避免在析构类A
实例时发生内存泄漏。
如果要避免这种手动簿记,可以考虑使用以下标准容器或包装器,这些容器或包装器在其析构函数中封装并为您执行簿记:
std::vector< int >
如果大小不固定且在编译时未知;std::unique_ptr< int[] >
大小是否固定但在编译时未知;std::array< int, N >
大小是否固定并且在编译时已知。
相关文章:
- 运算符C++ "delete []"仅删除 2 个前值
- g++用户定义的动态链接库上的全局new和delete运算符
- 为什么"delete"关键字不删除节点?
- "delete"在 C++ 中实际上做了什么?
- 析构函数和'delete'之间的区别
- 如何知道何时调用删除以及何时调用 delete[] C++?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 析构函数中的"delete this"
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 即使在使用 delete[] 后仍保留的元素
- 如果我在下面的代码片段中添加"delete[] d;",为什么我得到零?
- C++原始指针和"delete"
- 为什么 std::vector 使用 std::分配器而不是运算符 new 和 delete?
- 重载 new 和 delete 会导致 valgrind 错误
- 为什么"delete"操作员给我访问权限冲突
- 析构函数是否会自动调用 delete[] C++?
- C++"::delete"的目的是什么?
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 基类指针:在哪里使用 new 和 delete