gpt4 book ai didi

c++ - 删除基类指针时 'delete' 是如何工作的

转载 作者:行者123 更新时间:2023-11-30 03:02:20 24 4
gpt4 key购买 nike

#include <iostream>

using namespace std;
int *p1;
struct base
{
base():a(10){}
int a;
~base()
{
cout << "~base()\n";
}
};

struct derive:public base
{
derive():b(5){

p1=&b;
cout << p1 << "\n";

}
int b;
~derive()
{
cout << "~derive()\n";
}
};
int main()
{
base *p = new derive;
delete(p);
cout << *p1;
return 0;
}

我认为derive的b应该没有被删除,但是p1指向的被删除了。当我删除没有发生动态继承时指向派生类的基类指针时,它是如何工作的?对不起我的英语。

最佳答案

这是未定义的行为,因为基类析构函数不是。 UB 意味着任何事情都可能发生。

如果基类没有虚析构函数,不要通过基类删除派生对象。

关于c++ - 删除基类指针时 'delete' 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10229481/

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