簡體   English   中英

你能告訴一個函數在C ++中運行時是否是純虛函數嗎

[英]Can you tell if a function is pure virtual at runtime in c++

我遇到了一個非常零星的錯誤,其中虛函數在運行時看起來已經變得“純凈”。 一定是內存損壞,顯然該對象尚未銷毀,但可能已被覆蓋。

調試器將虛函數列表中的指針之一顯示為NULL。

問題是,您能否在運行時判斷一個函數是否== NULL?

&(object->function)==NULL

正在給出編譯錯誤“對綁定成員函數表達式的非法操作”

編輯:用那句話,我要做的是四處檢查,看看是否可以在崩潰之前在運行時攔截這種情況(函數地址為0x00000000)。 只要具有問題功能的對象可能已經存在了一段時間並且經歷了許多過程,那么顯示代碼就會有些長,因此我不希望實際問題得到解決。 我只是想知道我是否可以進行一些測試以盡早發現損壞(該錯誤是零星的錯誤)

如果在構造派生類(實現該虛擬函數的類)之前或銷毀該類之后調用虛擬函數,則會調用純虛擬函數。 正式地,這也會導致不確定的行為。 您也許可以添加一個在具體派生類的ctor中設置的標志,並在dtor中重置,然后檢查該標志,但這是一個丑陋的hack。 您也可以使用typeid檢查類型,但是該方法更復雜,因此更有可能引起進一步的問題。

但有一個建議:您應該系統地確保將來不會發生此類問題。 有時候,繞道而行,以保證正確的代碼是值得的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM