复习:虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)

虚析构函数

虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对
象。

#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

class Base
{
public:
    Base()
    {
        cout << "Base" << endl;
    }

    // virtual ~Base()
    ~Base()
    {
        cout << "~Base" << endl;
    }
};

class Derived : public Base
{
public:
    Derived()
    {
        cout << "Derived" << endl;
    }

    ~Derived()
    {
        cout << "~Derived" << endl;
    }
};

void test1()
{
    Base *pb;
    pb = new Derived;
    delete pb;
}

int main()
{
    test1();

    system("pause");
    return 0;
}

如果析构函数不加virtual,delete pb只会执行Base的析构函数,而不是真正的Derived析构函数。因为不是virtual函数,所以调用的函数依赖于指向静态类型,即Base。如下图所示。
在这里插入图片描述

virtual ~Base();

基类Base析构函数,加上virtual后,正调用子类的析构函数。
在这里插入图片描述

纯虚析构函数

纯虚析构函数在 c++中是合法的,但是在使用的时候有一个额外的限制:必须为纯
虚析构函数提供一个函数体。 那么问题是:如果给虚析构函数提供函数体了,那
怎么还能称作纯虚析构函数呢? 纯虚析构函数和非纯析构函数之间唯一的不同之
处在于纯虚析构函数使得基类是抽象类,不能创建基类的对象。
在这里插入图片描述

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖玖玖_violet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值