【发布时间】:2011-09-25 14:05:59
【问题描述】:
在 C++ 中,我有一个 class A,它有一个抽象类指针以允许包含在 class B 中的多态性,我还有另一个指向抽象 class C 的指针,它分配了 @987654324 子类的具体实例@ 进入该内存,我需要从class C 调用清理(见下面的问题)函数来释放我从堆分配的class B 的子类占用的内存,问题是我不能保证我可以访问清理功能,因为我只有一个指向 class C 的指针,我不能只是复制它,因为当我调用需要销毁包含的 class A 时,它可能已经消失了。
为了解决无法访问清理功能的问题,我是否可以在 class A 指针上调用 delete,即使我指向子类? C++ new 是否也像 malloc 一样存储堆块大小,以便您可以删除指向这样的抽象类的指针所引用的内存? 如果不是,是否有另一种方法来组织允许我处理的程序情况?
【问题讨论】:
-
实际代码会有点复杂,正如您可能从它的摘要中看出的那样,如果有人否定地回答主要问题并且我需要重组我的所有课程,我可以发布代码,也许再澄清一下情况。
-
不幸的是,摘要比实际代码更难理解。不过,不要发布您的真实代码,而是制作一个最小、完整的示例来展示您的问题。通常这样的代码会以
class Foo {开头。
标签: c++ virtual new-operator abstract delete-operator