c++,为什么一个基类被delete后其虚成员函数还可以被访问
大家讲道理
大家讲道理 2017-04-17 13:29:22
0
2
383
#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就崩了。

刘奇

你刪了的檔案為什麼還能被恢復?
你已經將一些記憶體回收了,並不是將裡面內容全部清空~這些記憶體再寫入新內容前都是舊的內容~

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板