假設我有作爲從雙向鏈表中刪除時,如何避免內存泄漏?
class list
{
/*...*/
private:
struct node
{
node* prev;
node* next;
int* value;
}
node* first; //NULL if none
node* last; //NULL if none
/*...*/
}
如果我想編寫一個函數,刪除第一個節點,並返回一個指向它的價值,這將實現泄漏內存雙鏈表這樣?
int* returnFrontValue()
{
if(list_is_Empty())
throw -1;
else
{
node* v = first;
int* returnMe = v->value;
first = first->next;
if(!first)
last = NULL;
delete v;
first->prev = NULL;
return returnMe;
}
}
我很好奇,如果這個實現泄漏內存,因爲returnMe
指向動態分配一個int。最好有一個int returnMe = *(v->value);
,並在最後返回&returnMe;
?
難道我我delete v;
前明確要delete v->value;
?當我有很多指針時,我很困惑如何刪除內存。
返回一個局部變量的地址?絕對不是更好。 – chris
爲什麼每個節點都有一個指向動態分配的「int」的指針,而不是簡單的「int」成員? – interjay
@interjay如果是會員,'delete v'會將其銷燬 – TeaOverflow