c++ - R6025 纯虚函数调用 : What is and how to resolve

标签 c++ visual-c++ pure-virtual

可以在这里找到答案:

An Excerpt from Effective C++, Third Edition, by Scott Meyers

url 发布者: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 发生,删除时一切正常,但发生内存泄漏。 当 cApplication 应用程序将被破坏时,删除指针引用 R6025 也会在“程序退出”时发生。

由于哔哔声,R6025 吓到我了:s

似乎我必须在两者之间做出选择,但我只是不想,这里发生了什么?

问候, 约翰

编辑:添加了一些代码,似乎 Eran 是对的,因为我确实在那里调用了虚函数

编辑:添加到示例中,[ virtual void OnLostDevice() = 0; ].从 abstract 更改为 ascoop 给出了一个立竿见影的解决方案。开始阅读下面评论中的那个页面,因为我觉得我还没有到那儿。

编辑:得到答案后,我明白了自己的问题。所以我重写了问题,所以答案符合问题。

谢谢,约翰

最佳答案

您不得在构造函数析构函数中调用虚函数。我在这里没有看到纯虚函数,但是如果 cBaseApplication::Release 碰巧调用了一个,那么每次销毁 cBaseApplication 时都会出现该错误。我不确定这是不是问题所在,因为我没有所有代码,但您的代码会遇到此类问题。

关于c++ - R6025 纯虚函数调用 : What is and how to resolve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269035/

相关文章:

c++ - 纯虚拟的备用参数列表不会继承(需要 "using")

c++ - 保护 CRTP 模式免受 "pure virtual"调用中的堆栈溢出

c++ - 重载 << 以输出 map 的 key_type 和 mapped_type

c++ - 按下按钮时如何选择 Qtablewidget 中的所有行?

visual-c++ - Gdiplus 64 位颜色

c++ - 无法转换参数 - 转换失去限定符

c++ - 在不同字节中写入位 c c++

c++ - CUDA 设备到主机的复制非常慢

c++ - MessageBox 在捕获异常时不起作用

c++ - 两次声明纯虚函数是否完全合法(在层次结构中的两个类中)