真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++不要在構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛函數(shù)的原因是什么

這篇文章主要講解了“C++不要在構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛函數(shù)的原因是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C++不要在構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛函數(shù)的原因是什么”吧!

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供阜平網(wǎng)站建設(shè)、阜平做網(wǎng)站、阜平網(wǎng)站設(shè)計(jì)、阜平網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、阜平企業(yè)網(wǎng)站模板建站服務(wù),十余年阜平做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。


C++不要在構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛函數(shù)的原因是什么

Reason(原因)

到目前為止,被調(diào)用的函數(shù)應(yīng)該只屬于構(gòu)造對(duì)象本身,而不是可能存在于派生類中的某個(gè)覆蓋函數(shù)。那樣做非常難理解。最壞的情況,在構(gòu)造函數(shù)或者析構(gòu)函數(shù)中直接或間接調(diào)用一個(gè)沒有實(shí)現(xiàn)的純虛函數(shù)會(huì)導(dǎo)致沒有定義的行為。

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();
   }
};
     

注意:調(diào)用一個(gè)特定的限定函數(shù)不是虛調(diào)用,即使這個(gè)函數(shù)是虛函數(shù)。

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

參考工廠函數(shù)以便了解如何達(dá)成調(diào)用派生類功能的效果而不必承擔(dān)引起未定義行為的風(fēng)險(xiǎn)。

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.

從構(gòu)造函數(shù)和析構(gòu)函數(shù)中調(diào)用虛函數(shù)并不是本身有什么錯(cuò)誤。這種調(diào)用的語(yǔ)義是安全的。然而,經(jīng)驗(yàn)表明這樣的調(diào)用很少是必須的,很容易擾亂維護(hù)者,如果被新手使用會(huì)成為錯(cuò)誤源。

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

  • 提示來自構(gòu)造函數(shù)或析構(gòu)函數(shù)的虛函數(shù)調(diào)用。

感謝各位的閱讀,以上就是“C++不要在構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛函數(shù)的原因是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)C++不要在構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛函數(shù)的原因是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


文章標(biāo)題:C++不要在構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛函數(shù)的原因是什么
網(wǎng)站鏈接:http://weahome.cn/article/gdehgi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部