原文:為什么不要在構造函數中調用虛函數

先看一段在構造函數中直接調用虛函數的代碼: 這里的結果將打印: 。 這表明第 行執行的的是Base::Foo 而不是Derive::Foo ,也就是說:虛函數在構造函數中 不起作用 。為什么 當實例化一個派生類對象時,首先進行基類部分的構造,然后再進行派生類部分的構造。即創建Derive對象時,會先調用Base的構造函數,再調用Derive的構造函數。 當在構造基類部分時,派生類還沒被完全創建,從 ...

2012-04-28 12:57 2 14078 推薦指數:

查看詳情

絕對不要在 構造函數/析構函數 調用函數

今天為了查一個重復delete的bug,在析構函數調用了一個函數 toString,想在對象析夠前打印對象信息,結果發現打印出來全都是基類的,后來仔細研究了這個問題,先說結論: 1,絕對不要在構造函數和析構函數調用函數,他們都不是動態綁定的。 2,如果析構函數函數 ...

Sun Feb 21 07:19:00 CST 2016 0 1774
【C++】不要在構造函數或析構函數調用函數

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

Mon Aug 24 19:31:00 CST 2015 0 5023
要在構造函數調用可重寫的方法

原因 非密封類型的構造函數調用其類定義的方法。 規則說明 調用方法時,直到運行時之前都不會選擇執行該方法的實際類型。構造函數調用方法時,可能尚未執行調用該方法的實例的構造函數。 如何修復沖突 ...

Thu Jun 29 18:14:00 CST 2017 0 1638
C++構造函數不能調用函數

構造函數調用函數,並不會產生多態的效果,就跟普通函數一樣。 c++ primer 第四版497頁15.4.5構造函數和析構函數講到,如果在構造函數或析構函數調用函數,則運行的是為構造函數或析構函數自身類型定義的版本。另外,必須通過基類類型的引用或指針進行函數調用才會發生多態 ...

Mon Aug 22 22:18:00 CST 2016 0 1774
構造函數和析構函數可以調用調用函數

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

Mon Sep 16 04:10:00 CST 2019 0 1615
構造函數為什么不能是函數

1. 從存儲空間角度,函數對應一個指向vtable函數表的指針,這大家都知道,可是這個指向vtable的指針其實是存儲在對象的內存空間的。問題出來了,如果構造函數的,就需要通過 vtable來調用,可是對象還沒有實例化,也就是內存空間還沒有,怎么找vtable呢?所以構造函數 ...

Wed Aug 29 03:23:00 CST 2012 1 24273
構造函數為什么不能是函數

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

Sun Dec 20 02:50:00 CST 2015 0 3161
Java在構造函數調用其它構造函數

在Java構造函數調用其它構造函數的方式與C++不同,需要使用this關鍵字,而不是像C++直接使用構造函數名來調用。 運行結果為: ...

Tue May 05 17:50:00 CST 2020 0 3769
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM