我在以下代码中无法理解崩溃的原因:
class A {
public:
virtual ~A() { goo(); }
void goo() { absFoo(); }
virtual void absFoo() = 0;
};
class B : public A {
public:
void absFoo() { cout << "In B \n"; }
};
int main()
{
B b1;
b1.goo();
}
Run Code Online (Sandbox Code Playgroud)
主要按照预期打印"In B",但最终崩溃时,我无法调试它,编译器弹出一个奇怪的消息.
所以我的问题是,当A的析构函数调用"goo()"时,"absFoo()"会崩溃, 因为我们指的是一个抽象函数?
或者编译器是否实际在派生类中查找定义?(并且它不再存在,因为它事先被破坏所以它崩溃了)
我知道如果我们直接从析构函数调用"absFoo()",原因就是抽象函数.但是因为这里是一个外部函数,称为"absFoo()",我无法理解真正的原因.
我正在使用天蓝色函数作为表插入事件触发器,特别是持久函数,并且我试图在我的活动函数中生成一些日志。
问题是活动函数没有收到任何“ILogger”,编排器也没有收到任何“ILogger”,因此我没有任何访问权限,也无法生成用于调试的日志。
整体流程为:
HTTP 请求 => Duarble HTTP 启动器 => 持久功能协调器 =>持久功能活动。
有没有办法为从 ILogger 派生的某些类创建记录器实例?或者也许是一种将 ILogger 实例从 HTTP 启动器传递到活动函数的方法?
任何解决方案将不胜感激!