答案可以在这里找到:
从C ++有效,第三版,斯科特迈尔斯摘录
网址发表 : hmjd
所以你明白为什么它正在发生,请阅读页面。 你也知道为什么代
virtual void OnRelease() = 0;
通过:
virtual void OnRelease(){};
将工作,但不是解决的正确方法。
原来的问题
R6025:纯虚函数调用
#include <Windows.h>
// static lib
//file.h
class cBaseApplication
{
public:
virtual ~cBaseApplication(){ Release(); }
virtual void Release()
{
OnRelease();
};
virtual void OnRelease() = 0;
}; // class cBaseApplication
//file1.h
class cApplication : public cBaseApplication
{
public:
virtual void OnRelease()
{
/* what the heck do something here */
};
}; // class cApplication
// executable
// file3.h
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow )
{
cApplication* pApplication = new cApplication();
/*...what the heck, do stuff...*/
pApplication->Release();
delete pApplication; // R6025: pure virtual function call
pApplication = NULL;
return 0;
}
在生产线
delete pApplication;
R6025发生和拆卸时,发生的所有罚款,但内存泄漏。 卸下指针引用的R6025将在“程序退出”太多发生时cApplication应用将是毁灭。
由于蜂鸣声时,R6025让我害怕:■
因为它似乎我有两个,但我只是不想之间做出选择,发生了什么吗?
问候,约翰
编辑:添加一些代码,似乎叶兰是正确的,因为我做的调用虚函数有
编辑:添加到例如,[虚拟无效OnLostDevice()= 0; ]。 从抽象到ascoop改变了立即解决。 开始阅读页面下面为我的感觉我现在还没有评论。
编辑:我得到了答案后,我明白我自己的问题。 所以我改写了这个问题,所以回答适合的问题。
谢谢,约翰