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

醬壇子

專(zhuān)注C++技術(shù) 在這里寫(xiě)下自己的學(xué)習(xí)心得 感悟 和大家討論 共同進(jìn)步(歡迎批評(píng)?。。。?/p>

  C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  66 Posts :: 16 Stories :: 236 Comments :: 0 Trackbacks

公告

王一偉 湖南商學(xué)院畢業(yè) 電子信息工程專(zhuān)業(yè)

常用鏈接

留言簿(19)

我參與的團(tuán)隊(duì)

搜索

  •  

積分與排名

  • 積分 - 389905
  • 排名 - 64

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

<轉(zhuǎn)自csdn相關(guān)問(wèn)題回復(fù)>

CObject::AssertValid ? 成員函數(shù)提供對(duì)對(duì)象內(nèi)部狀態(tài)的運(yùn)行時(shí)檢查。盡管從 ? CObject ? 派生類(lèi)時(shí)不需要重寫(xiě) ? AssertValid,但可以通過(guò)重寫(xiě)使您的類(lèi)更安全可靠。AssertValid ? 應(yīng)在對(duì)象的所有成員變量上執(zhí)行斷言,以驗(yàn)證它們包含有效值。例如,它應(yīng)檢查指針成員變量不為 ? NULL。 ?
? ?
? 下面的示例顯示如何聲明 ? AssertValid ? 函數(shù): ?
? class ? CPerson ? : ? public ? CObject ?
? { ?
? protected: ?
? ? ? ? CString ? m_strName; ?
? ? ? ? float ? ? ? m_salary; ?
? public: ?
? #ifdef ? _DEBUG ?
? ? ? ? virtual ? void ? AssertValid() ? const; ? ? ? // ? Override ?
? #endif ?
? ? ? ? // ? ... ?
? }; ?
? 當(dāng)重寫(xiě) ? AssertValid ? 時(shí),在執(zhí)行您自己的檢查之前請(qǐng)調(diào)用 ? AssertValid ? 的基類(lèi)版本。然后使用 ? ASSERT ? 宏檢查您的派生類(lèi)特有的成員,如下所示: ?
? ?
? #ifdef ? _DEBUG ?
? void ? CPerson::AssertValid() ? const ?
? { ?
? ? ? ? // ? call ? inherited ? AssertValid ? first ?
? ? ? ? CObject::AssertValid(); ?
? ?
? ? ? ? // ? check ? CPerson ? members... ?
? ? ? ? ASSERT( ? !m_strName.IsEmpty()); ? // ? Must ? have ? a ? name ?
? ? ? ? ASSERT( ? m_salary ? > ? 0 ? ); ? // ? Must ? have ? an ? income ?
? } ?
? #endif ?
? 如果任何成員變量存儲(chǔ)對(duì)象,則可以使用 ? ASSERT_VALID ? 宏測(cè)試它們的內(nèi)部有效性(如果它們的類(lèi)重寫(xiě)了 ? AssertValid)。 ?
? ?
? 例如,考慮 ? CMyData ? 類(lèi),該類(lèi)在其成員變量之一中存儲(chǔ)了一個(gè) ? CObList。CObList ? 變量 ? m_DataList ? 存儲(chǔ)了一個(gè) ? CPerson ? 對(duì)象的集合。CMyData ? 的簡(jiǎn)化聲明如下所示: ?
? ?
? class ? CMyData ? : ? public ? CObject ?
? { ?
? ? ? ? // ? Constructor ? and ? other ? members ? ... ?
? ? ? ? protected: ?
? ? ? ? ? ? ? CObList* ? m_pDataList; ?
? ? ? ? // ? Other ? declarations ? ... ?
? ? ? ? public: ?
? #ifdef ? _DEBUG ?
? ? ? ? ? ? ? virtual ? void ? AssertValid( ? ) ? const; ? // ? Override ?
? #endif ?
? ? ? ? // ? Etc. ? ... ?
? }; ?
? CMyData ? 中重寫(xiě)的 ? AssertValid ? 如下所示: ?
? ?
? #ifdef ? _DEBUG ?
? void ? CMyData::AssertValid( ? ) ? const ?
? { ?
? ? ? ? // ? Call ? inherited ? AssertValid ?
? ? ? ? CObject::AssertValid( ? ); ?
? ? ? ? // ? Check ? validity ? of ? CMyData ? members ?
? ? ? ? ASSERT_VALID( ? m_pDataList ? ); ?
? ? ? ? // ? ... ?
? } ?
? #endif ?
? CMyData ? 使用 ? AssertValid ? 機(jī)制測(cè)試其數(shù)據(jù)成員中存儲(chǔ)的對(duì)象的有效性。CMyData ? 中重寫(xiě)的 ? AssertValid ? 為它自己的 ? m_pDataList ? 成員變量調(diào)用 ? ASSERT_VALID ? 宏。 ?
? ?
? 因?yàn)?? CObList ? 類(lèi)也重寫(xiě) ? AssertValid,所以有效性測(cè)試不在該級(jí)別停止。該重寫(xiě)對(duì)列表的內(nèi)部狀態(tài)執(zhí)行附加有效性測(cè)試。因此,對(duì) ? CMyData ? 對(duì)象的有效性測(cè)試將導(dǎo)致對(duì)存儲(chǔ)的 ? CObList ? 列表對(duì)象內(nèi)部狀態(tài)的附加有效性測(cè)試。 ?
? ?
? 再多進(jìn)行一些操作,還可以添加對(duì)存儲(chǔ)在列表中的 ? CPerson ? 對(duì)象的有效性測(cè)試??梢詮?? CObList ? 派生 ? CPersonList ? 類(lèi),并重寫(xiě) ? AssertValid。在重寫(xiě)中可調(diào)用 ? CObject::AssertValid,然后循環(huán)訪問(wèn)列表,在列表中存儲(chǔ)的每個(gè) ? CPerson ? 對(duì)象上調(diào)用 ? AssertValid。本主題開(kāi)始所示的 ? CPerson ? 類(lèi)已重寫(xiě)了 ? AssertValid。 ?
? ?
? 當(dāng)為調(diào)試生成時(shí),這是一種功能極強(qiáng)的機(jī)制。當(dāng)接著為發(fā)布生成時(shí),該機(jī)制自動(dòng)關(guān)閉。 ?
? ?
? AssertValid ? 的限制 ?
? 給定類(lèi)的 ? AssertValid ? 函數(shù)的用戶應(yīng)注意該函數(shù)的限制。觸發(fā)的斷言指示對(duì)象一定有誤,并且執(zhí)行將暫停。但是,缺少斷言只指示未找到任何問(wèn)題,并不保證對(duì)象是好的。??

當(dāng)從 ? CObject ? 派生類(lèi)時(shí),在使用 ? DumpAllObjectsSince ? 將對(duì)象轉(zhuǎn)儲(chǔ)到“輸出”窗口時(shí),可以重寫(xiě) ? Dump ? 成員函數(shù)以提供附加信息。 ?
? ?
? Dump ? 函數(shù)將對(duì)象的成員變量的文本化表示形式寫(xiě)入轉(zhuǎn)儲(chǔ)上下文 ? (CDumpContext)。轉(zhuǎn)儲(chǔ)上下文類(lèi)似于 ? I/O ? 流??梢允褂貌迦脒\(yùn)算符 ? (<<) ? 向 ? CDumpContext ? 發(fā)送數(shù)據(jù)。 ?
? ?
? 重寫(xiě) ? Dump ? 函數(shù)時(shí),應(yīng)先調(diào)用 ? Dump ? 的基類(lèi)版本以轉(zhuǎn)儲(chǔ)基類(lèi)對(duì)象的內(nèi)容。然后為派生類(lèi)的每個(gè)成員變量輸出文本化說(shuō)明和值。 ?
? ?
? Dump ? 函數(shù)的聲明如下所示: ?
? ?
? class ? CPerson ? : ? public ? CObject ?
? { ?
? public: ?
? #ifdef ? _DEBUG ?
? ? ? ? virtual ? void ? Dump( ? CDumpContext& ? dc ? ) ? const; ?
? #endif ?
? ?
? ? ? ? CString ? m_firstName; ?
? ? ? ? CString ? m_lastName; ?
? ? ? ? // ? And ? so ? on... ?
? }; ?
? 由于對(duì)象轉(zhuǎn)儲(chǔ)只在調(diào)試程序時(shí)有意義,所以 ? Dump ? 函數(shù)的聲明用 ? #ifdef ? _DEBUG ? / ? #endif ? 塊括起來(lái)。 ?
? ?
? 在下面的示例中,Dump ? 函數(shù)先為其基類(lèi)調(diào)用 ? Dump ? 函數(shù)。然后,它將每個(gè)成員變量的簡(jiǎn)短說(shuō)明與該成員的值一起寫(xiě)入診斷流。 ?
? ?
? #ifdef ? _DEBUG ?
? void ? CPerson::Dump( ? CDumpContext& ? dc ? ) ? const ?
? { ?
? ? ? ? // ? Call ? the ? base ? class ? function ? first. ?
? ? ? ? CObject::Dump( ? dc ? ); ?
? ?
? ? ? ? // ? Now ? do ? the ? stuff ? for ? our ? specific ? class. ?
? ? ? ? dc ? << ? "last ? name: ? " ? << ? m_lastName ? << ? "\n" ?
? ? ? ? ? ? ? << ? "first ? name: ? " ? << ? m_firstName ? << ? "\n"; ?
? } ?
? #endif ?
? 必須提供 ? CDumpContext ? 參數(shù)以指定轉(zhuǎn)儲(chǔ)輸出的目的地。MFC ? 的“Debug”版本提供名為 ? afxDump ? 的預(yù)定義 ? CDumpContext ? 對(duì)象,它將輸出發(fā)送到調(diào)試器。 ?
? ?
? CPerson* ? pMyPerson ? = ? new ? CPerson; ?
? // ? Set ? some ? fields ? of ? the ? CPerson ? object. ?
? //... ?
? // ? Now ? dump ? the ? contents. ?
? #ifdef ? _DEBUG ?
? pMyPerson->Dump( ? afxDump ? ); ?
? #endif ?
? 在 ? MFC ? 程序中,可以使用 ? DumpAllObjectsSince ? 轉(zhuǎn)儲(chǔ)有關(guān)堆中尚未釋放的所有對(duì)象的說(shuō)明。DumpAllObjectsSince ? 轉(zhuǎn)儲(chǔ)自上個(gè) ? CMemoryState::Checkpoint ? 以來(lái)分配的所有對(duì)象。如果未發(fā)生 ? Checkpoint ? 調(diào)用,則 ? DumpAllObjectsSince ? 將轉(zhuǎn)儲(chǔ)當(dāng)前在內(nèi)存中的所有對(duì)象和非對(duì)象。 ?
? ?
? 注意 ? ? ? 必須先啟用診斷跟蹤,然后才能使用 ? MFC ? 對(duì)象轉(zhuǎn)儲(chǔ)。 ?
? 注意 ? ? ? 程序退出時(shí) ? MFC ? 將自動(dòng)轉(zhuǎn)儲(chǔ)所有泄漏的對(duì)象,因此不必創(chuàng)建代碼在該點(diǎn)轉(zhuǎn)儲(chǔ)對(duì)象。 ?
? 以下代碼通過(guò)比較兩個(gè)內(nèi)存狀態(tài)來(lái)測(cè)試內(nèi)存泄漏,并在檢測(cè)到泄漏時(shí)轉(zhuǎn)儲(chǔ)所有對(duì)象: ?
? ?
? if( ? diffMemState.Difference( ? oldMemState, ? newMemState ? ) ? ) ?
? { ?
? ? ? ? TRACE( ? "Memory ? leaked!\n" ? ); ?
? ? ? ? diffMemState.DumpAllObjectsSince(); ?
? } ?
? 轉(zhuǎn)儲(chǔ)的內(nèi)容如下所示: ?
? ?
? Dumping ? objects ? -> ?
? ?
? {5} ? strcore.cpp(80) ? : ? non-object ? block ? at ? $00A7521A, ? 9 ? bytes ? long ?
? {4} ? strcore.cpp(80) ? : ? non-object ? block ? at ? $00A751F8, ? 5 ? bytes ? long ?
? {3} ? strcore.cpp(80) ? : ? non-object ? block ? at ? $00A751D6, ? 6 ? bytes ? long ?
? {2} ? a ? CPerson ? at ? $51A4 ?
? ?
? Last ? Name: ? Smith ?
? First ? Name: ? Alan ?
? Phone ? #: ? 581-0215 ?
? ?
? {1} ? strcore.cpp(80) ? : ? non-object ? block ? at ? $00A7516E, ? 25 ? bytes ? long ?
? 大多數(shù)行開(kāi)始處的大括號(hào)中的數(shù)字指定對(duì)象的分配順序。最近分配的對(duì)象具有最高編號(hào),并顯示在轉(zhuǎn)儲(chǔ)的頂部。???
?
posted on 2007-03-07 16:41 @王一偉 閱讀(3384) 評(píng)論(1)  編輯 收藏 引用

Feedback

# re: debug調(diào)試中,AssertValid和Dump 這兩個(gè)函數(shù)怎么進(jìn)行工作的? 2008-02-25 16:45 Tbag
支持  回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲尤物精选| 亚洲曰本av电影| 欧美激情综合亚洲一二区| 亚洲国产精品传媒在线观看| 亚洲激情欧美| 欧美日韩中文字幕在线视频| 一区二区欧美日韩| 久久精品亚洲精品| 亚洲国产日韩美| 国产精品二区二区三区| 欧美一区视频在线| 亚洲经典自拍| 欧美主播一区二区三区| 亚洲国产美女| 国产精品免费看片| 美女国内精品自产拍在线播放| 91久久黄色| 久久精品一二三| 亚洲美女免费精品视频在线观看| 国产精品久久国产三级国电话系列| 欧美一级理论性理论a| 亚洲黄色视屏| 久久精品主播| av成人激情| 精品动漫一区| 国产精品久久999| 巨乳诱惑日韩免费av| 亚洲一二三区精品| 亚洲高清影视| 久久婷婷蜜乳一本欲蜜臀| 一区二区三区日韩欧美| 激情亚洲网站| 国产精品久久久久99| 久久综合网络一区二区| 午夜精品久久久久久久| 亚洲激情一区二区| 久久亚洲欧洲| 午夜久久福利| 日韩视频一区二区三区在线播放免费观看 | 999在线观看精品免费不卡网站| 久久成人综合视频| 99这里有精品| 亚洲电影下载| 国产自产在线视频一区| 国产精品久久久久一区二区| 农夫在线精品视频免费观看| 欧美一级专区| 亚洲一区二区欧美日韩| 亚洲欧洲一级| 欧美二区在线看| 久久综合九色综合欧美就去吻| 午夜精品久久久久影视| 一本色道久久综合亚洲91 | 亚洲精品在线视频观看| 国产一区二区日韩精品欧美精品 | 亚洲精品久久久蜜桃 | 亚洲国产激情| 一区二区在线观看av| 国产亚洲一二三区| 国产精品视屏| 国产精品午夜在线观看| 国产精品国产三级国产a| 欧美日韩激情小视频| 欧美激情二区三区| 欧美激情一区二区三区蜜桃视频| 蜜臀91精品一区二区三区| 久久精品视频在线| 久久久久久久综合色一本| 久久福利视频导航| 久久九九精品| 免费成人激情视频| 欧美成人一区在线| 欧美区一区二| 欧美日韩天天操| 国产精品久久久久久久久久久久 | 免费人成精品欧美精品| 噜噜噜在线观看免费视频日韩| 久久偷窥视频| 欧美激情一区二区三区在线| 亚洲国产视频一区| 99国产精品99久久久久久| 99亚洲伊人久久精品影院红桃| 日韩一级片网址| 亚洲天堂av综合网| 亚洲一区中文字幕在线观看| 亚洲欧美在线另类| 久久久久天天天天| 欧美成人精品h版在线观看| 欧美激情网友自拍| 欧美涩涩网站| 国产三区精品| 亚洲国产日韩欧美在线动漫| 日韩亚洲欧美成人| 午夜精品福利在线观看| 久久精品女人天堂| 亚洲国产成人porn| 亚洲精品在线看| 亚洲夜晚福利在线观看| 久久国产免费| 欧美高清视频一区| 国产精品久久一卡二卡| 狠狠色综合网站久久久久久久| 亚洲精品日本| 午夜在线视频观看日韩17c| 久久久亚洲精品一区二区三区| 欧美大片网址| 一区二区三区欧美在线| 久久久精品动漫| 欧美午夜一区二区三区免费大片| 国产欧美日韩| 99成人在线| 久久久久国产一区二区三区四区| 亚洲精美视频| 欧美在线亚洲综合一区| 欧美精品亚洲精品| 国产在线精品成人一区二区三区 | 久久国产88| 欧美日韩一级黄| 激情视频一区| 亚洲综合精品| 亚洲国产成人精品久久久国产成人一区| 制服诱惑一区二区| 久久在线91| 国产日韩久久| 亚洲影视在线| 亚洲国产欧美一区二区三区同亚洲 | 亚洲欧美一区二区三区久久| 免费一区二区三区| 亚洲欧美久久久久一区二区三区| 欧美国产一区视频在线观看| 国产一区二区三区的电影| 亚洲午夜视频在线| 欧美激情一级片一区二区| 欧美亚洲网站| 国产精品久久久久婷婷| 日韩一级免费| 欧美成人有码| 久久精品成人欧美大片古装| 国产精品欧美日韩| 亚洲视频在线观看三级| 欧美激情第三页| 久久久久综合网| 国产一区二区三区日韩欧美| 亚洲综合第一页| 99riav久久精品riav| 免费看的黄色欧美网站| 激情久久五月天| 久久狠狠婷婷| 性欧美8khd高清极品| 国产精品久久久久久久久搜平片 | 欧美1区2区3区| 久久成人亚洲| 国产一区深夜福利| 久久精品国产第一区二区三区最新章节 | 国产在线日韩| 久久蜜桃av一区精品变态类天堂| 亚洲欧美在线免费观看| 国产乱子伦一区二区三区国色天香| 一区二区三区久久| 亚洲精品中文字幕有码专区| 免费久久99精品国产| 亚洲黄色在线观看| 亚洲成人在线视频播放 | 国产精品美女久久久免费| 一区二区三区视频在线播放| 最新国产拍偷乱拍精品| 欧美国产亚洲视频| 一本色道久久综合一区 | 亚洲欧美日韩国产中文| 国产精品专区一| 久久高清免费观看| 久久国产精品毛片| 在线观看福利一区| 欧美激情视频给我| 欧美日本不卡| 午夜精品一区二区三区四区| 亚洲欧美国产高清va在线播| 国产亚洲欧美日韩精品| 久久午夜视频| 欧美激情按摩| 亚洲一区二区三区在线视频| 亚洲一区二区三区久久| 国产婷婷一区二区| 女同性一区二区三区人了人一| 欧美成人一区二区三区在线观看 | 欧美成人有码| 欧美精品一区在线播放| 亚洲欧美另类国产| 亚洲欧美日韩精品综合在线观看| 国产一区二区你懂的| 免费成人激情视频| 欧美日韩亚洲系列| 欧美在线免费视频| 另类尿喷潮videofree| 中文在线资源观看网站视频免费不卡 | 亚洲欧美国产精品桃花| 激情六月婷婷久久| 日韩特黄影片| 狠狠色丁香久久婷婷综合丁香| 亚洲高清一区二区三区|