gpt4 book ai didi

C++ 析构函数 - 继承上下文中的显式调用

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:05 24 4
gpt4 key购买 nike

我不确定我的问题是否中肯,但就是这样。

我知道我们应该只在堆上分配内存时显式调用析构函数。

假设我们有两个类:Animal 和 Dog,它们是 Animal 的子类。

    Animal a* = new Dog();
//-------Do something here-----//
a -> ~Animal();

再一次,假设 Animal 包含几个动态分配的字段,而 Dog 类添加了几个动态分配的字段。

由于Dog的字段比较多,调用Animal的析构函数会导致内存泄漏。这仅仅是糟糕的编程风格还是我们可以找到解决方法?

我想我们需要将指针转换为 Dog 类型,然后调用析构函数,但我找不到任何关于如何正确执行此操作的引用。

最佳答案

Because Dog has more fields, calling the Animal destructor will result in memory leakage.

如果 Animal 的析构函数是 virtual,则不会发生这种情况。

此外,您不需要调用~Animal()。一个异常(exception)是如果您正在编写自己的分配器。通常您调用 delete a

关于C++ 析构函数 - 继承上下文中的显式调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31126010/

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