[英]Reusing a pointer after `delete`
做以下事情是否安全和/或良好做法?
//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
來存儲有關新數據的其他信息。 如果這不是一個好的做法,那么替代方案是什么?
這取決於。 每次使用new創建對象時,必須在使用后將其刪除。 在給定的函數中,您要刪除以創建新的函數,但是在完成對象后還要刪除嗎? 創建對象更安全,並在對象超出范圍時讓系統刪除它。
我會盡可能避免,因為如果沒有適當刪除,你可以創建內存泄漏。
是的,在刪除它指向的先前內存后,重用指針來存儲新的內存地址是完全沒問題的。
注意不要取消引用仍存儲在指針中的舊內存地址。 在你的代碼片段中,這不是問題。
作為旁注,大多數情況下,如果需要動態分配的數組,則應使用std::vector
,如注釋中所述。
你正在做的事情沒有任何內在錯誤。 但是,如果它是類的成員函數,並且list
是成員變量,請注意您擁有的代碼不是異常安全的。
換句話說,如果由於某種原因調用new[]
失敗,則list
數組已被破壞,您無法恢復數據。
最好這樣做:
void NewList(int size)
{
ListObject* temp = new ListObject[size];
delete[] list;
list = temp;
}
如果對new[]
的調用拋出異常,則表示您沒有銷毀原始數據。
但是,如果您使用std::vector
,所有這些都會得到解決,正如其他人所建議的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.