为什么此虚拟析构函数在C ++中不起作用?

萨赫拉(Sahra Gh)

我正在尝试删除子类的对象。尽管我使用了虚拟析构函数,但仍收到错误消息:

malloc: *** error for object 0x7ffee08bab50: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

我的代码是:

#include <iostream>

using namespace std;

class Animal{
  protected:
    int age;
  public:
    Animal(){
      age = 0;
      cout << "ctor Animal" << endl;
    }
    virtual ~Animal(){
      cout << "dtor Animal" << endl;
    }
};

class Mammal : public Animal{
  public:
    Mammal(){
      age = 0;
      cout << "ctor Mammal" << endl;
    }
    ~Mammal(){
    cout << "dtor Mammal" << endl;
    }
};

int main(){
  Mammal *dog = new Mammal();
  delete &dog;
}

如果有人帮助我,我将非常感激!

x

@songyuanyao是正确的:delete dog而不是delete &dog您分配了地址存储在中的内存dog&dog是该地址的存储地址,可能在堆栈上。所以&dog是一个Mammal **,你没有new,但是这是不是在堆栈上的编译器自动创建。既然没有new,那你就做不到delete

顺便说一句,如果您想查看虚拟析构函数的效果,请使用Animal *dog = new Mammal();由于您声明dog为aMammal并将其创建为a Mammal,因此无论其是否是虚拟,都会调用正确的析构函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

虚拟析构函数:不起作用?

为什么要为C ++中的抽象类声明虚拟析构函数?

为什么我们需要C ++中的纯虚拟析构函数?

C ++中的析构函数不起作用

C ++中的纯虚拟析构函数

为什么此.slideToggle函数在jQuery中不起作用?

C ++。在析构函数中调用虚拟成员函数

为什么此C代码在JavaScript中不起作用?

在C ++中调用虚拟析构函数的顺序

C函数屏蔽:为什么此示例不起作用?

为什么在Friend函数中调用析构函数

为什么“函数尝试”在 C++ 中不起作用?

为什么 if 语句在 C++ 函数中不起作用?

为什么C ++中的析构函数会增加它们所在的对象的大小?

为什么C ++不使用std :: nested_exception允许从析构函数中抛出?

C ++为什么在类中添加析构函数会使类无法移动?

C ++为什么在堆栈中构造完对象后立即调用析构函数?

为什么 C++ 中类字段的默认初始化需要析构函数调用?

为什么不在析构函数中关闭串行端口?

为什么“ for”在“ go”中不起作用?

在PHP中为什么不起作用

为什么“setOnClickListener (this)”在“for in”中不起作用?

为什么此常量声明在Java中不起作用?

为什么解密功能中的此循环不起作用?

为什么此jQuery在Codeigniter中不起作用?

为什么此if语句在Django中不起作用?

为什么此BindingAdapter在Kotlin中不起作用?

为什么此Regex在R中不起作用

为什么此查询在PHPMyAdmin中不起作用