C++。在析构函数中调用虚成员函数

C++. Calling a virtual member function in destructor

每个使用此扩展的 class 在析构函数中调用 abort 并且调用堆栈告诉我调用 abort 的函数是从头文件中的不合理位置调用的。其他功能被覆盖并且工作正常。

Renderable.h

#pragma once
class Renderable
{
public:
    virtual void update(long delta) = 0;
    virtual void destroy() = 0;
    virtual void render() = 0;
    virtual ~Renderable();
};

Renderable.cpp

#include "Renderable.h"

Renderable::~Renderable()
{
    (this->*(&Renderable::destroy))(); // GLUtils::runOnUIThreadWithContext(this, &Renderable::destroy, true);
} // It says that it gets called from here.

当实例化一个对象时,base class 被初始化,然后 subclass 被初始化。当销毁一个对象时,subclass 被销毁,然后是 base class。 subclass被析构后,其成员和虚方法都不可用——没有destroy()方法可以调用。我建议你将 destroy() 方法中的逻辑移动到 subclass 析构函数中。