释放抽象类指针 > C++中,我有一个类A/Ung>,它有一个抽象类指针,允许在类B 中包含多态性,我有另一个指向抽象代码< C>类>代码的指针,它将一个子类的具体实例分配给代码,并将其命名为类B ,我需要调用一个清除(参见下面的问题)函数fromclass C来释放我从堆中分配的class B的子类占用的内存,问题是我不能保证我可以访问cleanup函数,因为我只有一个指向class C的指针,我不能复制它,因为在我调用时它可能已经消失了,所以我需要销毁包含类A

释放抽象类指针 > C++中,我有一个类A/Ung>,它有一个抽象类指针,允许在类B 中包含多态性,我有另一个指向抽象代码< C>类>代码的指针,它将一个子类的具体实例分配给代码,并将其命名为类B ,我需要调用一个清除(参见下面的问题)函数fromclass C来释放我从堆中分配的class B的子类占用的内存,问题是我不能保证我可以访问cleanup函数,因为我只有一个指向class C的指针,我不能复制它,因为在我调用时它可能已经消失了,所以我需要销毁包含类A,c++,virtual,new-operator,abstract,delete-operator,C++,Virtual,New Operator,Abstract,Delete Operator,为了解决无法访问cleanup函数的问题,即使指向子类,我是否可以在class A指针上调用delete如果有其他方法来组织程序,允许我处理这个情况? < p>我使用我的水晶球,因为很难跟随你的问题,但你可能需要。虚拟析构函数。我使用水晶球是因为很难理解你的问题,但你可能需要虚拟析构函数。标准状态(§5.3.5¨3): 在第一个备选方案(删除对象)中,如果操作数的静态类型与其动态类型不同,则静态类型应为操作数动态类型的基类,并且静态类型应具有虚拟析构函数,或者行为未定义 如果我理解正确,您有一个

为了解决无法访问cleanup函数的问题,即使指向子类,我是否可以在
class A
指针上调用delete<“C++”new也存储堆块大小,如MALOC,这样你就可以删除指针对一个抽象类的引用所引用的内存了吗?< /强>如果有其他方法来组织程序,允许我处理这个情况?

< p>我使用我的水晶球,因为很难跟随你的问题,但你可能需要。虚拟析构函数。

我使用水晶球是因为很难理解你的问题,但你可能需要虚拟析构函数。

标准状态(§5.3.5¨3):

在第一个备选方案(删除对象)中,如果操作数的静态类型与其动态类型不同,则静态类型应为操作数动态类型的基类,并且静态类型应具有虚拟析构函数,或者行为未定义

如果我理解正确,您有一个派生类型的对象,并且您持有一个指向它的指针,其静态类型是它的基类之一;所以,只要你有
virtual
析构函数,你就没事了


编辑嗯,我太慢了:p

标准规定(§5.3.5¨3):

在第一个备选方案(删除对象)中,如果操作数的静态类型与其动态类型不同,则静态类型应为操作数动态类型的基类,并且静态类型应具有虚拟析构函数,或者行为未定义

如果我理解正确,您有一个派生类型的对象,并且您持有一个指向它的指针,其静态类型是它的基类之一;所以,只要你有
virtual
析构函数,你就没事了



编辑嗯,我的速度太慢了:p

实际的代码会有点复杂,正如你从它的摘要中可以看出的那样,如果有人对主要问题的回答是否定的,而我需要重组我所有的类,我可以发布代码,也许可以进一步澄清情况。不幸的是,总结比实际代码更难理解。不过,不要发布您的真实代码,而是制作一个展示您的问题的最小、完整的示例。通常,这样的代码将以
类Foo开头{
。实际的代码会有点复杂,正如你从它的摘要中可以看出的那样,如果有人否定地回答了主要问题,而我需要重组我所有的类,我可以发布代码,可能会进一步澄清情况。不幸的是,总结比实际代码更难理解。不要发布真实的代码,尽管如此,但请给出一个展示您的问题的最小、完整的示例。通常此类代码将以
类Foo开头{
。看看加粗的部分真的,背景有点混乱。我的主要问题是关于删除虚拟类指针引用的内存,假设我的析构函数是虚拟的,这样做安全吗?很好的水晶球技能!现在告诉我为什么我的3D Anagliph DirectX web应用程序没有获得足够的FPS…人马座:m星座ars和jupiter以及强烈的疯狂活动会影响你的黄道带。现在不是开发DirectX应用程序的好时机。只需看看粗体部分,事实上,背景有点混乱。我的主要问题是删除虚拟类指针引用的内存,假设我的析构函数是虚拟的,这样做安全吗?好的crysta我的球技能!现在告诉我为什么我的3D浮雕DirectX网络应用没有获得足够的FPS…射手座:火星和木星的星座以及强烈的疯狂活动会影响你的黄道带。现在不是开发DirectX应用的好时机。