gpt4 book ai didi

c++ - 使析构函数不是虚拟的,并在特殊情况下删除基指针是否安全?

转载 作者:太空宇宙 更新时间:2023-11-04 14:28:58 24 4
gpt4 key购买 nike

<分区>

假设我们有一个 BST_Node 类:

struct BST_Node {
BST_Node* left;
BST_Node* right;
}

还有一个 AVL_Node 类:

struct AVL_Node : BST_Node {
int height;
}

在某些函数中

void destroyTree() {
BST_Node *mynode = new AVL_Node;
delete mynode; // Is it ok ?
}

问题 #1

当析构函数是非虚拟的但派生中只有基元类型时,在基类上调用 delete 是否安全? (不会有内存泄漏吗?)

问题 #2

在派生类中声明析构函数为虚函数时,规则是什么?据我了解,所有的析构函数都是同一个函数,我们可以调用它 destructor() 然后当我们删除一个基指针时,析构函数只为基类调用,但是当删除派生类时,析构函数也会被分派(dispatch)到子派生类中。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com