ડꫀꫀ ꪗꪮꪊ. 2022-12-06 23:44 采纳率: 88.6%
浏览 17

这两段代码 调用的析构函数为啥不一样啊?不懂


#include<iostream>
using namespace std;
class Point
{
public:
    Point(int a, int b) {
        a = x;
        b = y;
    }
 
    ~Point()
    {
        cout << "executing Point destructor" << endl;
    }
private:
    int x;
    int y;
};
class Circle :public Point
{
public:
    Circle(int a, int b, int c) :Point(a, b), radus(c) {
    }
    ~Circle()
    {
        cout << "executing Circle destructor" << endl;
    }
private:
    int radus;
};
int main()
{
    Point* p = new Circle(2.5, 1.8, 4.5);
    delete p;
    return 0;
}




#include<iostream>
using namespace std;
class Point
{
public:
    Point(int a, int b) {
        a = x;
        b = y;
    }
 
    virtual ~Point()
    {
        cout << "executing Point destructor" << endl;
    }
private:
    int x;
    int y;
};
class Circle :public Point
{
public:
    Circle(int a, int b, int c) :Point(a, b), radus(c) {
    }
    ~Circle()
    {
        cout << "executing Circle destructor" << endl;
    }
private:
    int radus;
};
int main()
{
    Point* p = new Circle(2.5, 1.8, 4.5);
    delete p;
    return 0;
}

```

  • 写回答

1条回答 默认 最新

  • Huazie 全栈领域优质创作者 2022-12-07 00:20
    关注
    • virtual 修饰的析构函数,就是虚析构函数;

    • 虚析构函数的特点是:在父类中通过virtual 修饰析构函数后,通过 父类指针再去指向子类对象,然后通过delete 父类指针,就可以 释放掉子类对象了【也就是 先会调子类的析构函数,然后再调父类的析构函数】

    • 如果没有 virtual修饰 父类的析构函数,那通过 父类指针再去指向子类对象,然后通过delete 父类指针,只会释放父类对象,也就是只会调用父类的析构函数。

    可以看看这篇:


    如有帮助,欢迎采纳哈!

    评论

报告相同问题?

问题事件

  • 创建了问题 12月6日

悬赏问题

  • ¥15 mysql sum函数优化
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题
  • ¥20 基于matlab的航迹融合 航迹关联 航迹插补
  • ¥15 用Matlab实现图中的光线追迹