WEB开发网
开发学院软件开发VC MFC教程(10)-- 内存分配方式和调试机制 阅读

MFC教程(10)-- 内存分配方式和调试机制

 2010-03-25 20:35:03 来源:WEB开发网   
核心提示:MFC对象内容转储对象内容转储是CObject类提供的功能,所有从它派生的类都可以通过覆盖虚拟函数DUMP来支持该功能,MFC教程(10)-- 内存分配方式和调试机制(5),在讲述CObject类时曾提到过,虚拟函数Dump的定义:class ClassName : public CObject{public:#ifd

MFC对象内容转储

对象内容转储是CObject类提供的功能,所有从它派生的类都可以通过覆盖虚拟函数DUMP来支持该功能。在讲述CObject类时曾提到过。

虚拟函数Dump的定义:

class ClassName : public CObject
{
public:
#ifdef _DEBUG
virtual void Dump( CDumpContext& dc ) const;
#endif

};

在使用Dump时,必须给它提供一个CDumpContext类型的参数,该参数指定的对象将负责输出调试信息。为此,MFC提供了一个预定义的全局CDumpContext对象afxDump,它把调试信息输送给调试器的调试窗口。从前面AfxTrace的实现可以知道,MFC使用了afxDump输出跟踪信息到调试窗口。

CDumpContext类没有基类,它提供了以文本形式输出诊断信息的功能。

例如:

CPerson* pMyPerson = new CPerson;
// set some fields of the CPerson object...
//...
// now dump the contents
#ifdef _DEBUG
pMyPerson->Dump( afxDump );
#endif

MFC对象有效性检测

对象有效性检测是CObject类提供的功能,所有从它派生的类都可以通过覆盖虚拟函数AssertValid来支持该功能。在讲述CObject类时曾提到过。

虚拟函数AssertValid的定义:

class ClassName : public CObject
{
public:
#ifdef _DEBUG
virtual void AssertValid( ) const;
#endif

};

使用ASSERT_VALID宏判断一个对象是否有效,该对象的类必须覆盖了AssertValid函数。形式为:ASSERT_VALID(pObject)。

另外,MFC提供了一些函数来判断地址是否有效,如:

AfxIsMemoryBlock,AfxIsString,AfxIsValidAddress。

内存诊断

MFC使用DEBUG_NEW来跟踪内存分配时的执行的源码文件和行数。

把#define new DEBUG_NEW插入到每一个源文件中,这样,调试版本就使用_malloc_dbg来分配内存。MFC Appwizard在创建框架文件时已经作了这样的处理。

AfxDoForAllObjects

上一页  1 2 3 4 5 6  下一页

Tags:MFC 教程 内存

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接