c – “纯虚函数调用”崩溃来自哪里?

我有时会注意到程序在我的电脑崩溃的错误:“纯虚拟函数调用”。

当一个对象不能被创建一个抽象类时,这些程序甚至如何编译?

如果您尝试从构造函数或析构函数进行虚函数调用,它们可能会产生。因为你不能从构造函数或析构函数中调用虚函数(派生类对象没有被构造或者已经被销毁),它调用基类版本,在纯虚函数的情况下,不存在。

(见现场演示here)

class Base
{
public:
    Base() { doIt(); }  // DON'T DO THIS
    virtual void doIt() = 0;
};

void Base::doIt()
{
    std::cout<<"Is it fine to call pure virtual function from constructor?";
}

class Derived : public Base
{
    void doIt() {}
};

int main(void)
{
    Derived d;  // This will cause "pure virtual function call" error
}
http://stackoverflow.com/questions/99552/where-do-pure-virtual-function-call-crashes-come-from

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – “纯虚函数调用”崩溃来自哪里?