c++,为什么一个基类被delete后其虚成员函数还可以被访问
大家讲道理
大家讲道理 2017-04-17 13:29:22
[C++讨论组]
#include <iostream>
using namespace std;


class Base
{
public:
    Base(){};
    virtual void  Base1(){cout << "Base::Base1" << endl;}
    virtual void  Base2(){cout << "Base::Base2" << endl;}
    virtual ~Base(){};
};

int main()
{
    Base*  f = new Base;

    intptr_t* vptr_adress = (intptr_t*)f;
    intptr_t* vptr_func1_adress = (intptr_t*)*vptr_adress;

    typedef void(*FUNC)(void);
    FUNC f1 = (FUNC)*vptr_func1_adress;
    FUNC f2 = (FUNC)*(vptr_func1_adress+1);

    f1();
    f2();

    delete f;

    f1();
    f2();

    system("pause");
    return 0;
}

结果如下

问题如题:为什么在delete后仍然可以访问虚成员函数

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
迷茫

了解一下对象的Memory Model你就应该知道对象虚表里存的函数指针指向的函数并不存在于对象的内存空间里。譬如你可以把一个0转成一个Base*,然后用这个Base*去访问Base1,Base2都不会出问题。当然如果你成员函数里用到了this就崩了。

怪我咯

你删了的文件为什么还能被恢复?
你已经将一些内存回收了,并不是将里面内容全部清空~这些内存再写入新内容前都是旧的内容~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号