答案可以在这里找到:
url发布者:hmjd
请阅读该页面,以便了解其发生的原因.你也知道为什么要替换
virtual void OnRelease() = 0;
Run Code Online (Sandbox Code Playgroud)
通过:
virtual void OnRelease(){};
Run Code Online (Sandbox Code Playgroud)
将起作用,但不是正确的解决方法.
原始问题
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;
}
Run Code Online (Sandbox Code Playgroud)
在线
delete pApplication;
Run Code Online (Sandbox Code Playgroud)
发生R6025,并且在移除时,会发生所有精细但内存泄漏.当cApplication应用程序将被破坏时,在"程序退出"时也会删除指针引用R6025.
由于哔哔声,R6025吓到了我:s
因为看起来我必须在两者之间做出选择,但我只是不想,这里发生了什么?
问候,约翰
编辑:添加了一些代码,似乎Eran是正确的,因为我在那里调用虚函数
编辑:添加到示例,[virtual void OnLostDevice()= 0; ].从抽象变为ascoop提供了一个直接的解决方案.开始在下面的评论中阅读该页面,因为我感觉我还没有.
编辑:我得到答案后,我理解自己的问题.所以我重写了这个问题,所以答案符合这个问题.
谢谢,约翰
您不能在构造函数和析构函数中调用虚函数.我没有在这里看到一个纯虚函数,但是如果cBaseApplication::Release碰巧调用一个,你每次破坏时都会得到那个错误cBaseApplication.我不确定这是什么问题,因为我没有所有的代码,但是你的代码需要解决这类问题.
| 归档时间: |
|
| 查看次数: |
16779 次 |
| 最近记录: |