原文:絕對不要在 構造函數/析構函數 中調用虛函數

今天為了查一個重復delete的bug,在析構函數中調用了一個虛函數 toString,想在對象析夠前打印對象信息,結果發現打印出來全都是基類的,后來仔細研究了這個問題,先說結論: ,絕對不要在構造函數和析構函數中調用虛函數,他們都不是動態綁定的。 ,如果析構函數是虛函數,那么可以看到類似動態綁定的效果,但這並不是動態綁定,也並不意味着我們可以隨意在析構函數中調用 間接調用虛函數 ,如果基類存在虛 ...

2016-02-20 23:19 0 1774 推薦指數:

查看詳情

【C++】不要在構造函數析構函數調用函數

  這個問題來自於《Effective C++》條款9:永遠不要在構造函數析構函數調用函數 。   假設有如下代碼:    現在,請分析執行下列代碼調用時所發生的事情:   很明顯,一個 BuyTransaction類構造器被調用。但是,首先調用 ...

Mon Aug 24 19:31:00 CST 2015 0 5023
構造函數析構函數可以調用調用函數

可以,函數底層實現原理(但是最好不要在構造析構函數調用) 可以,但是沒有動態綁定的效果,父類構造函數調用的仍然是父類版本的函數,子類調用的仍然是子類版本的函數。 effictive c++第九條,絕不在構造析構過程調用virtual,因為構造函數的base的函數 ...

Mon Sep 16 04:10:00 CST 2019 0 1615
構造函數析構函數能是函數嗎?

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

Thu Sep 21 03:42:00 CST 2017 0 1523
為什么不要在構造函數調用函數

先看一段在構造函數中直接調用函數的代碼:   這里的結果將打印:1。   這表明第6行執行的的是Base::Foo()而不是Derive::Foo(),也就是說:函數構造函數“不起作用”。為什么?   當實例化一個派生類對象時,首先進行基類部分的構造,然后再進行派生類 ...

Sat Apr 28 20:57:00 CST 2012 2 14078
C++構造函數析構函數調用函數

https://blog.csdn.net/K346K346/article/details/49872023 雖然可以對函數進行實調用,但程序員編寫函數的本意應該是實現動態聯編。在構造函數調用函數函數的入口地址是在編譯時靜態確定的,並未實現調用。但是為什么在構造函數調用 ...

Wed Oct 21 22:57:00 CST 2020 0 411
能直接調用析構函數,不能直接調用構造函數

  在我們進行面向對象程序設計的時候,我們肯定要設計自己的類,這樣一來,我們就需要設計自己需要的構造函數析構函數,那么我們可以通過指針直接調用構造函數析構函數嗎? 進行驗證: #include <iostream> using namespace std; //程序說明 ...

Thu Apr 26 08:04:00 CST 2018 0 954
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM