簡體   English   中英

刪除指針數組

[英]Deleting an array of Pointers

我正在嘗試創建一個AVL樹,並且我正在使用動態指針數組來跟蹤哪些節點受插入影響。我的問題是刪除動態數組是否也會刪除指針的內容。代碼是尚未完成,但我想它會讓您了解我的意思。如果它不起作用,那我該怎么辦?謝謝。

treenode *newnode,**roadnodes,*parent ;
int x=(int)log(numberofnodes)+2,l=0 ;
bool *rightorleft,flag=true ;
newnode=new treenode ;
roadnodes=new treenode*[x] ;
rightorleft=new bool[x] ;
newnode->id=i ;
newnode->hl=0;
newnode->hr=0;
newnode->hm=0;
newnode->left=NULL;
newnode->right=NULL ;
if(head==NULL)
{
    delete[] roadnodes ;
    delete[] rightorleft ;
    numberofnodes++ ;
    head=newnode ;
    return true ;
}
parent=head ;
while(flag)
{
    roadnodes[l]=parent ;
    if(parent->id>i)
    {
        if(parent->left)
            parent=parent->left ;
        else
        {
            flag=false ;
            parent->left=newnode ;
        }
        rightorleft[l]=true ;
        l++ ;
    }
    else
    {
        if(parent->right)
            parent=parent->right ;
        else
        {
            flag=false ;
            parent->right=newnode ;
        }
        rightorleft[l]=false ;
        l++ ;
    }

}
return true ;

如果您問是否delete[] roadnodes; 將隱式delete roadnodes[0]; delete roadnodes[1]; ... delete roadnodes[0]; delete roadnodes[1]; ... delete roadnodes[0]; delete roadnodes[1]; ... ,答案是否定的。 絕對不會。 您有責任刪除它們。 如一些注釋中所建議,使用標准容器和智能指針是一種更好的方法。

問題是刪除動態數組是否也會刪除指針的內容。

在動態數組上調用delete時,將調用每個元素的析構函數。 您可能會猜到原始指針沒有析構函數,或者它是noop,所以沒有,不會釋放內存。 因此,您可以使用析構函數將釋放內存的智能指針,或者需要手動為每個指針調用delete。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM