【发布时间】:2023-04-03 12:29:01
【问题描述】:
我不确定我的问题有多大的针对性,但就是这样。
我知道只有在堆上分配内存时才应该显式调用析构函数。
假设我们有两个类:Animal 和 Dog,它是 Animal 的子类。
Animal a* = new Dog();
//-------Do something here-----//
a -> ~Animal();
再次,假设 Animal 包含几个动态分配的字段,而 Dog 类添加了几个动态分配的字段。
由于 Dog 的字段较多,调用 Animal 的析构函数会导致内存泄漏。这只是糟糕的编程风格还是我们可以找到解决方法?
我想我们需要将指针转换为 Dog 类型,然后调用析构函数,但我找不到任何关于如何正确执行此操作的参考。
【问题讨论】:
-
你描述的是原因,为什么任何应该被子类化的类都应该有一个虚拟析构函数。
标签: c++ memory destructor