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