亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++不要在構造函數或析構函數中調用虛函數的原因是什么

發布時間:2021-09-14 15:25:15 來源:億速云 閱讀:173 作者:chen 欄目:大數據

這篇文章主要講解了“C++不要在構造函數或析構函數中調用虛函數的原因是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++不要在構造函數或析構函數中調用虛函數的原因是什么”吧!



C++不要在構造函數或析構函數中調用虛函數的原因是什么


Reason(原因)

到目前為止,被調用的函數應該只屬于構造對象本身,而不是可能存在于派生類中的某個覆蓋函數。那樣做非常難理解。最壞的情況,在構造函數或者析構函數中直接或間接調用一個沒有實現的純虛函數會導致沒有定義的行為。


Example, bad(反面示例)
 
class Base {
public:
   virtual void f() = 0;   // not implemented
   virtual void g();       // implemented with Base version
   virtual void h();       // implemented with Base version
   virtual ~Base();        // implemented with Base version
};

class Derived : public Base {
public:
   void g() override;   // provide Derived implementation
   void h() final;      // provide Derived implementation

   Derived()
   {
       // BAD: attempt to call an unimplemented virtual function
       f();

       // BAD: will call Derived::g, not dispatch further virtually
       g();

       // GOOD: explicitly state intent to call only the visible version
       Derived::g();

       // ok, no qualification needed, h is final
       h();
   }
};
     

注意:調用一個特定的限定函數不是虛調用,即使這個函數是虛函數。

See also factory functions for how to achieve the effect of a call to a derived class function without risking undefined behavior.

參考工廠函數以便了解如何達成調用派生類功能的效果而不必承擔引起未定義行為的風險。

Note(注意)

There is nothing inherently wrong with calling virtual functions from constructors and destructors. The semantics of such calls is type safe. However, experience shows that such calls are rarely needed, easily confuse maintainers, and become a source of errors when used by novices.

從構造函數和析構函數中調用虛函數并不是本身有什么錯誤。這種調用的語義是安全的。然而,經驗表明這樣的調用很少是必須的,很容易擾亂維護者,如果被新手使用會成為錯誤源。

Enforcement(實施建議)
  • Flag calls of virtual functions from constructors and destructors.

  • 提示來自構造函數或析構函數的虛函數調用。

感謝各位的閱讀,以上就是“C++不要在構造函數或析構函數中調用虛函數的原因是什么”的內容了,經過本文的學習后,相信大家對C++不要在構造函數或析構函數中調用虛函數的原因是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

志丹县| 广宁县| 镇雄县| 铜川市| 阳山县| 赤水市| 汉源县| 博白县| 荔波县| 琼海市| 安仁县| 大田县| 根河市| 高碑店市| 珲春市| 天峨县| 米林县| 兰考县| 赣榆县| 伊吾县| 景德镇市| 嫩江县| 临武县| 高雄县| 岱山县| 广东省| 措美县| 神池县| 全椒县| 陆丰市| 平武县| 民和| 汉川市| 保亭| 白沙| 三门县| 新泰市| 淮安市| 兰坪| 鹤山市| 莱芜市|