gpt4 book ai didi

c++ - 继承中的析构函数

转载 作者:太空宇宙 更新时间:2023-11-04 16:22:35 25 4
gpt4 key购买 nike

我在查看下面的代码时产生了疑问。即为什么即使派生类的对象超出以下代码的范围,也不会调用派生类的析构函数:

#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;

class ClassA
{
protected:
int width, height;
public:
void set_values(int x, int y)
{
width = x;
height = y;
}
virtual int area()
{
return 0;
}
~ClassA()
{
cout << "base class destructor called" << endl;
}
};

class ClassB : public ClassA
{
public :
int area()
{
return (width * height);
}
~ClassB()
{
cout << "derived class destructor called" << endl;
}
};


int main()
{
ClassA *Ptr = NULL;
ClassB Obj;
Ptr = &Obj;
Ptr->set_values(10, 20);
cout << Ptr->area() << endl;
delete Ptr;
return 0;
}

最佳答案

你不应该调用 delete在指向派生类对象的基类指针上,除非基类析构函数是 virtual否则你得到的是未定义的行为

基类中的析构函数需要标记virtual .

virtual ~ClassA(){}

关于c++ - 继承中的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15269636/

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