做以下事情是否安全和/或良好做法?
//NewList is a member function of a class
void NewList(int size){
delete[] list; //list is a member variable; an already initialized dynamic array.
list=new ListObject[size];
}
我基本上丢弃了之前的数组,因为我将使用不同的数据存储在类中,因此需要新的list
来存储有关新数据的其他信息。如果这不是一个好的做法,那么替代方案是什么?
答案 0 :(得分:3)
这取决于。每次使用new创建对象时,必须在使用后将其删除。在给定的函数中,您要删除以创建新的函数,但是在完成对象后还要删除吗?创建对象更安全,并在对象超出范围时让系统删除它。
如果可能的话,我会避免,因为如果没有适当删除,你可以创建内存泄漏。
答案 1 :(得分:3)
是的,在删除指向的前一个内存后,重复使用指针存储新的内存地址是完全没错的。
请注意不要取消引用仍存储在指针中的旧内存地址。在您的代码段中,这不是问题。
作为旁注,大部分时间,如果你想要一个动态分配的数组,你应该使用std::vector
,如评论中所述。
答案 2 :(得分:1)
你正在做的事情本身没有任何错误。但是,如果它是类的成员函数,并且list
是成员变量,请注意您拥有的代码不异常安全。
换句话说,如果对new[]
的调用由于某种原因失败,则您的list
阵列已被销毁,您无法恢复数据。
最好这样做:
void NewList(int size)
{
ListObject* temp = new ListObject[size];
delete[] list;
list = temp;
}
如果对new[]
的调用引发异常,则您尚未销毁原始数据。
但是,如果你使用std::vector
,所有这些都会得到照顾,正如其他人所建议的那样。