01_sizeof

  1. 定義一個空的類型,裏面沒有任何的成員變量和成員函數,對類型求sizeof,得到的結果是多少?

    答:答案是1,空類型的實例中不包含任何信息,本來求sizeof應該是0,但是當我們聲明該類型實例的時候,它必須在內存中佔有一定的空間,至於佔多少內存由編譯器決定,Visual Studio中每個空類型佔一個字節的空間
  2. 如果在該類型中添加一個構造函數和析構函數,再對該類型求sizeof,得到的結果又是多少?

    答:和第1題一樣還是1。調用構造函數和析構函數只需要知道函數的地址即可,而這些函數的地址只與類型相關,而與類型的實例無關,因此編譯器也不會爲這兩個函數在實例中添加任何額外的信息。
  3. 如果把析構函數標記位虛函數呢?

    答:C++的編譯器一旦發現一個類型中有虛擬函數,就會爲該類型生成虛函數表,並在該類型的每一個實例中添加一個指向虛函數表的指針。在32位的機器上,一個指針佔4字節的空間,因此求sizeof得到4;如果是64位的機器,一個指針佔8字節的空間,因此求sizeof則得到8


     
  4. 複習一下虛函數的概念

    與繼承有關,爲了滿足多態與泛型編程而允許用戶使用虛函數來完成運行時決議,這與一般的編譯時決定有着本質區別
    調用哪個虛函數取決於指針指向的類型和引用的哪個類型的對象;通過子類賦值給父類時,只能調用父類中的基類成員(無論是否是虛函數),在編譯時就決定了,因此不屬於動態綁定,通過對象名調用虛函數也一樣。因此只有用地址才能體現多態性。
    具體參考https://blog.csdn.net/weixin_43329614/article/details/89103574
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章