Morisummer.. 2023-01-14 20:33 采纳率: 87.9%
浏览 40
已结题

C++为什么释放内存后还能访问

img

img


/*
运行阶段类型识别,为程序在运行阶段确定对象的类型,只适用于包含虚函数的类
问题引入:基类指针可以指向派生类对象,如何知道基类指针指向的是那个派生类的对象呢?
dynamic_cast运算符使用指向基类的指针来生成派生类指针,它不能回答“指针指向的是什么类的对象”,但能回答“是否可以安全的将对象的地址赋值给特定类型的指针”
这个问题
重点复习:free 和 delete可以一起释放掉后面的连续空间
*/

//以下为虚函数复习,dynamic_cast

#include <iostream>
using namespace std;

class Hero
{
public:
    virtual void skill1()
    {
        cout << "英雄释放了1技能" << endl;
    }
    
    virtual void skill2()
    {
        cout << "英雄释放了2技能" << endl;
    }

    virtual void skill3()
    {
        cout << "英雄释放了3技能" << endl;
    }
};

class XS : public Hero
{
public:
    virtual void skill1()
    {
        cout << "西施释放了1技能" << endl;
    }

    virtual void skill2()
    {
        cout << "西施释放了2技能" << endl;
    }

    virtual void skill3()
    {
        cout << "西施释放了3技能" << endl;
    }

    void skill4()
    {
        cout << "西施释放了4技能" << endl;
    }
};

class LB : public Hero
{
public:
    virtual void skill1()
    {
        cout << "李白释放了1技能" << endl;
    }

    virtual void skill2()
    {
        cout << "李白释放了2技能" << endl;
    }

    virtual void skill3()
    {
        cout << "李白释放了3技能" << endl;
    }
};

class HZ : public Hero
{
public:
    virtual void skill1()
    {
        cout << "猴子释放了1技能" << endl;
    }

    virtual void skill2()
    {
        cout << "猴子释放了2技能" << endl;
    }

    virtual void skill3()
    {
        cout << "猴子释放了3技能" << endl;
    }
};

int main()
{
    Hero* ptr = nullptr;
    int id;
    cin >> id;
    switch (id)
    {
    case 1:
        ptr = new XS;
        break;
    case 2:
        ptr = new LB;
        break;
    case 3:
        ptr = new HZ;
        break;
    default:
        ptr = new Hero;
        break;
    }
    ptr->skill1();
    ptr->skill2();
    ptr->skill3();

    if (id == 1)
    {
        XS* xsptr = dynamic_cast<XS*>(ptr);
        xsptr->skill4();
        delete xsptr;
        //为什么这里释放掉xsptr后还能调用skill4
        xsptr->skill4();
    }
    return 0;
}
  • 写回答

3条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 已结题 (查看结题原因) 1月29日
      • 已采纳回答 1月29日
      • 创建了问题 1月14日

      悬赏问题

      • ¥20 论文附带的代码如何运行?
      • ¥30 自动识别图像目标并判断
      • ¥30 BP神经网络遥感图像分类问题
      • ¥20 新闻小程序6万人在线
      • ¥15 Fluent轴流风扇模拟
      • ¥15 基于GPS的自行车定位系统设计
      • ¥15 idea中安装matplotlib模块完成,运行还是显示无安装
      • ¥15 robotframework 运行报错
      • ¥60 C# (VS2015) 用HttpWebRequest get 方式 与 post 方式
      • ¥30 yolo侦测mammogram总是没有好结果,求经验