青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

數據加載中……

【轉】關于C++虛函數

如果你是C++程序員,我想你可能遇到過這樣的情況:

在debug時,對著一個函數step into,明明調用的是A函數,可是結果卻跳進了B函數。

為什么,call stack里顯示的也是明明白白,就是直接進了B函數。百思不得其解,于是你懷疑是不是系統出了問題,是不是編譯器出了問題,是不是調試器出了問題~~~

其實那些玩意不是那么容易出錯的,先看看你你的A,B函數是不是同一個類的虛函數,如果是,這極有可能是因為你修改過虛函數而沒有完全編譯引起的。

還沒明白?看看這個例子, 假設你在Project1中有一個名為KuQin.COM的類,該類有三個虛函數:

class KuQin.COM
{
public:
virtual void f1();
virtual void f2();
virtual void f3();
};

在Project2中你調用了其虛函數:

pDbgNow->f2();

之后由于某種需求你在這個類中加入了一個虛函數:

class KuQin.COM
{
public:
virtual void f1();
virtual void f1_5();
virtual void f2();
virtual void f3();
};

只編譯Project1,在Project2中調用到pDbgNow->f2()時,你就會發現本文一開始描述的情況:明明調用的是f2(),結果卻進了f1_5()。理由如下:

pDbgNow->f2()之前被編譯為調用類KuQin.COM的第二個虛函數,因為是虛函數,其真正調用類似于pDbgNow->vtable[1]。因為在加入函數f1_5()后,f1_5成為了該虛表中的第二個函數,但由于沒有重新編譯Project2,pDbgNow->f2()的調用沒有更新為正確的pDgbNow->vtable[2],所以真正調用的是函數f1_5(),與函數名無關。

可能你會認為這種"低級錯誤"根本不會發生在你身上,至少有兩個方法來解決這個問題:

  1. 永遠把虛函數加到最后
  2. 永遠編譯所有的工程

的確,這兩招在一定程度上是有效的,但讓我們仔細分析一下:

  1. 永遠把虛函數加到最后,針對上面這個例子是有用的??墒侨绻衅渌惻缮陬怟uQin.COM,即使你把虛函數加到了類KuQin.COM的最后,還是會打亂其派生類的虛表。
  2. 永遠編譯所有的工程,這的確是一個保險的方法。可是在一個大型系統中,編譯所有的代碼所耗費的時間是非常大的,加了一個虛函數,你可能得等上個好幾個小時才能看到最后的結果,這是我們不愿承受的。

那么,對于大型系統中一個正處于積極修改期的核心基類,一個比較好的操作方法是預先分配好足夠多的虛函數,這樣之后需要加虛函數是,只要修改一個原有的就行了,無需大規模的rebuild ,只需編譯一下用到了這個虛函數的代碼就可以了??梢哉f節省的時間是相當可觀的:

class KuQin.COM
{
public:
virtual void f1();
virtual void f2();
virtual void f3();
virtual void dummyvirtualfunction1();
virtual void dummyvirtualfunction2();
virtual void dummyvirtualfunction3();
virtual void dummyvirtualfunction5();
virtual void dummyvirtualfunction6();
};

只要靈活運用dummyvirtualfunction,你不光可以運用于加虛函數,也可以在刪虛函數時發揮其作用。

記住兩個操作原則:

  1. 當dummyvirtualfunction快用完時,再預先分配一些。
  2. 當這一階段開發結束時,該基類趨于穩定,把多余的dummyvirtualfunction去掉就可以了。

posted on 2010-06-17 11:52 Stone xin 閱讀(260) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美视频四区| 亚洲激情自拍| 午夜精品久久久久| 国产精品一区免费观看| 久久爱另类一区二区小说| 亚洲亚洲精品在线观看| 国产区日韩欧美| 久久综合九色九九| 欧美激情第8页| 亚洲欧美在线高清| 久久国产一区二区三区| 亚洲美女av电影| 亚洲在线一区| 亚洲高清视频在线| 一区二区高清视频| 国产精品夜夜嗨| 在线视频中文亚洲| 国产情侣一区| 亚洲第一精品久久忘忧草社区| 欧美区视频在线观看| 欧美一区二区三区免费在线看 | 亚洲综合大片69999| 午夜在线成人av| 亚洲国语精品自产拍在线观看| 亚洲精品四区| 在线观看视频一区二区| 日韩网站在线| 亚洲成人在线网| 亚洲综合久久久久| 99热免费精品| 久久九九热免费视频| 亚洲免费网址| 欧美激情1区2区3区| 久久精品女人天堂| 欧美日韩一二三四五区| 欧美成人精品三级在线观看| 国产精品日本欧美一区二区三区| 免费成人网www| 国产日产欧产精品推荐色| 亚洲国产综合在线| 伊人男人综合视频网| 亚洲欧美在线另类| 亚洲午夜一区| 欧美好骚综合网| 欧美成人高清| 国产资源精品在线观看| 亚洲欧美一区二区三区极速播放| 亚洲最新视频在线播放| 久久综合中文| 免费欧美日韩国产三级电影| 国产手机视频精品| 亚洲一区一卡| 午夜精品久久久久久久久| 欧美日韩伦理在线| 最新国产乱人伦偷精品免费网站| 亚洲成人中文| 久久先锋影音| 欧美不卡视频| 在线日韩欧美| 久久婷婷成人综合色| 女人香蕉久久**毛片精品| 激情久久久久久久久久久久久久久久| 性欧美8khd高清极品| 久久国产成人| 韩国三级电影一区二区| 久久本道综合色狠狠五月| 久久久久亚洲综合| 狠狠色噜噜狠狠色综合久| 久久精品论坛| 欧美黄色日本| 亚洲精品少妇30p| 欧美久久久久久久久久| 9色精品在线| 销魂美女一区二区三区视频在线| 国产精品视频一区二区高潮| 性欧美长视频| 欧美aa国产视频| 日韩午夜av在线| 欧美午夜影院| 午夜在线精品| 欧美激情亚洲另类| 麻豆久久婷婷| 亚洲欧美中文在线视频| 国产欧美一区二区三区视频| 午夜欧美精品久久久久久久| 久久一区二区视频| 亚洲毛片一区| 国产精品一二三四| 久久久亚洲一区| 日韩一本二本av| 久久久www| 亚洲免费福利视频| 国产偷自视频区视频一区二区| 老司机凹凸av亚洲导航| 一本色道久久综合一区| 久久婷婷综合激情| 99热这里只有精品8| 国产日韩亚洲欧美| 欧美久久久久久久| 欧美一区二区三区在线视频| 亚洲国产精品久久久久| 欧美一区二区精品| 亚洲精选中文字幕| 国产日韩在线一区| 欧美日韩高清免费| 久久久一区二区| 中文精品视频| 亚洲国产精品黑人久久久| 欧美亚洲在线观看| 一区二区三区四区蜜桃| 黄色在线一区| 国产精品日韩一区| 欧美理论在线| 久久只精品国产| 午夜精品久久久久| 一道本一区二区| 91久久精品一区二区别| 蜜臀99久久精品久久久久久软件| 欧美一区二区三区成人| 亚洲一区二区三区久久 | 欧美日韩国产123| 美女视频网站黄色亚洲| 久久电影一区| 欧美一级网站| 亚洲一区二区三区中文字幕| 亚洲精品亚洲人成人网| 亚洲夫妻自拍| 欧美a级片一区| 麻豆精品传媒视频| 久久久五月天| 久久久水蜜桃| 久久久国产成人精品| 亚洲欧美亚洲| 午夜日韩电影| 欧美一区视频在线| 欧美亚洲视频在线观看| 亚洲影院免费| 羞羞视频在线观看欧美| 亚洲伊人观看| 性欧美xxxx大乳国产app| 亚洲女女女同性video| 亚洲一区二区三区成人在线视频精品| 中日韩美女免费视频网站在线观看| 亚洲精品国产精品久久清纯直播| 91久久中文字幕| 日韩午夜av| 亚洲天堂黄色| 亚洲欧美日韩一区二区| 性色av一区二区怡红| 久久精品国产久精国产爱| 久久精品国产亚洲一区二区| 久久精品中文字幕免费mv| 蜜臀91精品一区二区三区| 欧美高清视频一区| 亚洲精品在线观| 亚洲一级黄色av| 欧美一区二区三区免费看| 99精品国产高清一区二区| 韩国精品久久久999| 国产区精品视频| 亚洲电影免费观看高清完整版在线观看 | 欧美一区二区三区在线| 久久久久久久久综合| 猛男gaygay欧美视频| 亚洲黄色成人| 亚洲欧美日本日韩| 久久久精品一品道一区| 欧美国产日本在线| 国产精品一区久久| 亚洲国语精品自产拍在线观看| 一本色道久久88综合亚洲精品ⅰ| 午夜伦理片一区| 欧美国产日韩一区二区| 在线一区二区三区四区五区| 久久都是精品| 欧美日韩精品一区| 国产日韩欧美在线| 日韩视频免费在线| 久久成人18免费观看| 亚洲国产日韩在线| 午夜精品久久久久久久久久久久久| 老司机67194精品线观看| 国产精品视频自拍| 亚洲精品国产无天堂网2021| 欧美一区2区三区4区公司二百| 亚洲第一区在线| 欧美在线免费| 欧美午夜免费影院| 亚洲精品免费看| 老色鬼久久亚洲一区二区| 亚洲少妇最新在线视频| 欧美成人中文| 一区二区三区亚洲| 午夜精品久久久久久久久久久久| 亚洲第一天堂av| 久久精品成人| 国产精品永久| 亚洲欧美综合网| 亚洲免费激情| 欧美精品国产一区二区|