原文:為什么構造函數不能為虛函數,而析構函數可以為虛函數

. 構造函數為什么不能為虛函數 a. 存儲空間角度:虛函數的調用需要虛函數表指針,而該指針存放在對象的內容空間中,需要調用構造函數才可以創建他的值,否則即使開辟了空間,則虛表指針為隨機值,不會找到構造函數 若構造函數聲明為虛函數,那么由於對象還未創建,還沒有內存空間,更沒有虛函數表地址用來調用虛函數 構造函數了。 b. 使用上: 從實現上看,vbtl在構造函數調用后才建立,因而構造函數不可能成為 ...

2014-10-19 16:10 0 4104 推薦指數:

查看詳情

構造函數為什么不能為函數 & 基類的析構函數為什么要為函數

一、構造函數為什么不能為函數 1. 從存儲空間角度,函數相應一個指向vtable函數表的指針,這大家都知道,但是這個指向vtable的指針事實上是存儲在對象的內存空間的。問題出來了,假設構造函數的,就須要通過 vtable來調用,但是對象還沒有 ...

Wed Oct 08 23:41:00 CST 2014 0 3998
構造函數析構函數能是函數嗎?

1. 為什么構造函數能為函數函數的調用需要函數表指針,而該指針存放在對象的內容空間中;若構造函數聲明為函數,那么由於對象還未創建,還沒有內存空間,更沒有函數表地址用來調用函數——構造函數了。 2. 為什么析構函數以為函數,如果不設為函數 ...

Thu Sep 21 03:42:00 CST 2017 0 1523
構造函數為什么不能聲明為函數析構函數為什么要聲明為函數

多態中的函數表是在運行時創建的還是編譯時創建的? 答:函數表在編譯的時候就確定了,而類對象的函數指針vptr是在運行階段確定的,這是實現多態的關鍵 (類的函數的調用並不是在編譯時就確定的,而是在運行時才確定的,由於編寫代碼的時候並不能確定被調用的是基類的函數還是哪個派生類的函數,所以聲明 ...

Wed Oct 31 20:07:00 CST 2018 0 1311
函數和純函數析構函數

記錄了學習函數與純函數中有一些疑問,以及平常可能不注意的地方。 Q0:函數是怎么實現的? 0:簡單的說,是通過函數表實現的。如果一個類中含有函數,則系統會為這個類分配一個指針成員指向一張函數表(vtbl),表中每一項指向一個函數的地址,實現上就是一個函數指針的數組 ...

Sun Apr 14 01:43:00 CST 2019 0 882
析構函數函數

析構函數函數的輸出結果: 析構函數不是函數的輸出結果: ...

Fri Jun 14 05:00:00 CST 2019 0 916
(轉)=========C++中析構函數以為函數嗎?

轉載自:http://blog.csdn.net/yapian8/article/details/46418687 眾所周知,在實現多態的過程中,一般將基類的析構函數設為virtual,以便在delete的時候能夠多態的鏈式調用。那么析構函數是否可以設為純呢? class CBase ...

Mon Jul 03 23:44:00 CST 2017 0 1220
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM