(C++) pure virtual method called
February 24, 2017 · View on GitHub
(C++) pure virtual method called
pure virtual method called is a runtime error.
- Download the Qt Creator project 'CppRuntimeErrorPureVirtualMethodCalled' (zip)
- View the 'CppRuntimeErrorPureVirtualMethodCalled' program flow (png)
Below I posted code to reproduce the error, which I adapted from [1]. Also from [1]: 'So what’s the moral of the story? If you ever see the error message pure virtual method called / terminate called without an active exception, check your object lifetimes! You may be trying to call members on a destructing (and thus incomplete) object'.
Technical facts
Operating system(s) or programming environment(s)
Lubuntu 11.04 (natty)
Qt Creator 2.0.1
- G++ 4.5.2
Libraries used:
STL: GNU ISO C++ Library, version
4.5.2
Qt project file: CppPureVirtualMethodCalled.pro
#------------------------------------------------- # # Project created by QtCreator 2011-08-04T10:58:45 # #------------------------------------------------- QT += core QT -= gui QMAKE_CXXFLAGS += -std=c++0x TARGET = CppPureVirtualMethodCalled CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp
main.cpp
#include <thread> struct Base { virtual ~Base() { sleep(1); } virtual void DoIt() const = 0; }; struct Derived : public Base { virtual ~Derived() { } virtual void DoIt() const { } }; void Task(const void* const p) { const Base * const b = reinterpret_cast<const Base*>(p); while (1) b->DoIt(); } int main() { const Base * const b = new Derived(); std::thread t(Task,b); delete b; }
Screen output
pure virtual method called terminate called without an active exception The program has unexpectedly finished.
Program flow
The program flow can be seen in the (png) picture above. Not how first the instance is deletedm before the thread starts working with it.
- Software Architecture blog