gpt4 book ai didi

C++ 虚拟析构函数崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:05 25 4
gpt4 key购买 nike

我有以下类层次结构:

class Base  
{
public:
virtual ~Base();
};
class Derived : public Base
{
public:
virtual ~Derived();
};
class MoreDerived : public Derived
{
public:
virtual ~MoreDerived();
};

连同对象

Base* base = new Base();
MoreDerived* obj = new MoreDerived(*base);

有一部分代码需要使用线程删除 MoreDerived 对象,因此必须先将其转换为 void*。在线程中,我有

void KillObject(void* ptr)  
{
delete static_cast<Base*>(ptr);
}

所有指针都不是 NULL,void* ptr MoreDerived*(或至少是 Base*),但应用程序仍然崩溃...

最佳答案

在 C++ 中,强制转换通常会导致指针地址发生变化。在转换为 void * 之前,您需要先转换为 Base *,否则会有未定义的行为。 (转换到 Void * 或从 Void * 转换是可以的,但当转换回来时,两端的类型必须完全相同)

关于C++ 虚拟析构函数崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736991/

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