析构函数会自动在C ++中调用delete[]
吗?
例如:
class A
{
int *num;
A()
{
num=new int[5];
}
~A() {}
}
我是否必须将delete[]
添加到~A()
中?
答案 0 :(得分:6)
他们没有。如果希望在销毁int
时自动销毁动态分配的A
数组,请使用std::vector<int>
(如果大小固定,则使用std::array<int, 5>
)而不是{{1 }}指针可能是一个不错的选择。
答案 1 :(得分:2)
否。您需要在析构函数中调用delete[] num
,以避免在破坏类A
的实例时发生内存泄漏。
如果要避免进行手动记帐,可以考虑使用以下标准容器或包装器,这些容器或包装器在析构函数中为您封装并执行记帐:
std::vector< int >
,如果大小不是固定的,并且在编译时未知; std::unique_ptr< int[] >
,如果大小是固定的,但在编译时未知; std::array< int, N >
(如果大小是固定的,并且在编译时已知)。