【问题标题】:How to call destructor from base class which is not virtual? [duplicate]如何从非虚拟的基类调用析构函数? [复制]
【发布时间】:2014-02-08 11:17:21
【问题描述】:

假设我有一个从另一个类继承的类,并且我创建了一个从基类指向派生类对象的指针。现在,如果基类析构函数被定义为虚拟,那么它不会产生任何问题。但是,在我的例子中,基类析构函数没有被声明为虚拟的,所以当我删除这个指针时,它会导致内存泄漏。

如何在不修改基类代码的情况下克服这个问题?

【问题讨论】:

  • 显示更多代码。特别是显示破坏数据的代码(不清楚是不是你的)。
  • 你可以尝试使用组合而不是继承。

标签: c++ destructor virtual-functions virtual-destructor


【解决方案1】:

您可以将基类转换为派生并调用删除。

【讨论】:

    【解决方案2】:

    假设你的意思是你有Base*类型的指针(它没有虚拟析构函数),指向Derived类型的对象,你想删除它。 p>

    处理这种情况的一种简单方法是使用智能指针,例如 std::shared_ptr,它会记住原始(静态已知)对象类型并将其应用于删除。

    更一般地说,不要使用显式 delete:将其留给智能指针和容器对象。

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 1970-01-01
      • 2013-11-03
      • 2015-12-15
      • 2021-01-31
      • 2014-02-23
      • 2013-11-01
      • 1970-01-01
      • 2014-01-04
      相关资源
      最近更新 更多