每个使用此调用进行扩展的类都会在析构函数中中止,并且调用堆栈告诉我调用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.
答案 0 :(得分:7)
实例化对象时,基类会被初始化,然后子类被初始化。在破坏对象时,子类会被破坏,然后是基类。子类被破坏后,其成员和虚方法不可用 - 没有destroy()
方法被调用。我建议你将destroy()
方法中的逻辑移动到子类析构函数。