如果我想删除动态分配的基本类型值数组:
int *it = new int[10]
我只是将delete [] it
放在析构函数中以正确释放内存吗?
OR
意识到,作为指针是基本类型,删除动态分配的数组会涉及在析构函数中执行类似的操作:
for (size_t idx = 0; idx != 5; ++idx)
delete sp[idx];
delete[] sp;
我对此感到困惑,因为我的程序中存在很多与内存相关的错误。
答案 0 :(得分:5)
如果你有:
int* it = new int[10];
delete
的正确方法是:
delete[] it;
如果你有这种类型的成员变量,你需要实现一个复制构造函数和赋值运算符,因为这些的默认版本是不够的,或者使类不可复制。
由于这是C ++,我建议使用std::vector<int>
,因为这将为您处理内存管理。
答案 1 :(得分:2)
如果您要使用new
和delete
,则要遵循的一般规则是:使用尽可能多的delete
s new
。< / p>
在您的情况下,您只调用了new[]
一次。你应该只使用delete[]
一次。
顺便说一句,如果您将指针存储在成员变量中,请考虑Rule of Three。
我说“如果你打算使用new
和delete
”,因为你经常不应该这样做。使用RAII技术和标准容器,完全可以编写永远不会直接调用new
或delete
的完全有用的程序。
如果您尝试维护int
的数组,请使用std::vector
:
class MyClass {
std::vector<int> it;
void SomeFun() { it.resize(10); }
};
然后,在你的析构函数中,什么都不做。在你没有任何帮助的情况下,矢量消失了。