gpt4 book ai didi

c++ - 虚拟接口(interface) Dtor && Dynamic_Cast

转载 作者:行者123 更新时间:2023-11-27 23:31:51 25 4
gpt4 key购买 nike

我正在尝试从接口(interface)向下转型到派生类,但我的虚拟 dtor 杀死了它?

class IFOO
{
public:
virtual ~IFOO(){};

virtual size_t index() PURE;
};

class FOO : public IFOO
{
public:
FOO() : size(5){};
~FOO(){};

virtual size_t index(){ return index; };

size_t index;

};


int main() {

IFOO* A = &FOO();

FOO* B = dynamic_cast< FOO* >( A );

return 0;
}

为什么会这样?

最佳答案

您正在获取行中临时地址

IFOO* A = &FOO();

应该是

IFOO* A = new FOO();

我想如果你从你的接口(interface)中删除 dtor 代码就可以工作,因为在那种情况下它不会被调用,你进入了未定义行为的领域,在这个领域中一切皆有可能,即使是糟糕的代码也能按预期工作。

此外,我建议您不要将类名全部大写,因为这通常是宏的约定(除非您的类名是宏,但肯定不能这样)。另外,不要使用宏 (PURE) 使函数成为纯虚函数,这会使 95% 的人感到困惑,他们可能不得不阅读您的代码。

关于c++ - 虚拟接口(interface) Dtor && Dynamic_Cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com