您的位置:首页 > 其它

下面是我犯的一个错误,与大家共享教训

2008-12-26 12:15 295 查看

下面是我犯的一个错误,与大家共享教训:

MFC的文件类Cfile没有提供通写(WriteThrough)功能,所以就重载了CFile,目的是重新实现基类虚函数Open,派生类CwriteThroughFile,定义如下:

class _NCLIB_EXP CWriteThroughFile : public CFile
{
public:
// Constructors
CWriteThroughFile()
{}
CWriteThroughFile(int hFile)
: CFile(hFile) {}
CWriteThroughFile(LPCTSTR lpszFileName, UINT nOpenFlags)
: CFile(lpszFileName, nOpenFlags) {}

virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags,
CFileException* pError = NULL);
};

应用该类的代码:
try
{
CWriteThroughFile _file(pszDatFileName_, CFile::modeNoTruncate | CFile::modeCreate | CFile::modeReadWrite | CFile::shareDenyWrite);

}
}
catch (CFileException* pe_)
{

}

但是错误是:这个CwriteThroughFile的对象_file在打开文件时候,并没有调用虚函数CwriteThroughFile::Open,而是调用了基类的Open函数。

教训:
1 我没有仔细测试,是造成错误的直接原因,如果能够单步跟踪一下,一定能够发现问题。
所以无论写多么简单的代码都必须至少单步跟踪一边,不能想当然。这方面已经有很多教训了。
2 这个例子充分说明了在构造函数中调用虚函数的害处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐