程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Effective C++ Item 09

Effective C++ Item 09

編輯:關於C++

Item 09-絕不在構造函數和析構函數中調用virtual函數(Never call virtual functions during construction or destruction)

Why?

由於base class構造函數的執行更早於derived class構造函數,當base class構造函數執行derived class的成員變量尚未初始化。如果期間調用的virtual函數下降至derived class階層,要知道derived class的函數幾乎必然取用local成員變量,而那些成員變量尚未初始化。這會導致不明確行為。

根本的原因:在derived class對象的base class構造期間,對象的類型是base class而不是derived class。

析構函數同理,一旦derived class析構函數開始執行,對象內的derived class成員變量遍未呈現未定義值,所以C++視它們仿佛不存在。進入base class析構函數後對象就成為一個base class對象,而C++任何部分包括virtual函數,dynamic_casts等等也就那麼看待它。

請記住:

在構造和析構期間不要調用virtual函數,因為這類調用從不下調至derived class(比起當前執行構造函數和析構函數的那層)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved