繁体   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