qq_29184317
2021-08-05 09:01
采纳率: 66.7%
浏览 37

c++构造函数和析构函数的问题

我的代码不知道为什么,只调用了构造函数析构函数直接没有调用


#include<iostream>
#include<string>
using namespace std;

class animal{
public:
    animal()
    {
        cout<<"父类构造函数"<<endl;
    }
    virtual void speak()=0;//父类纯虚构函数,为子类提供操作接口
    ~animal()
    {
        cout<<"父类析构函数"<<endl;
    }
};
class dog:public animal{
public:
    dog()
    {
        cout<<"子类构造函数"<<endl;
    }
    void speak()
    {
        cout<<"狗在说话"<<endl;
    }
    ~dog()
    {
        cout<<"子类析构函数"<<endl;
    }
};
void dospeak(animal*animal)
{
    animal->speak();
}
void test()
{
    animal*p=new dog;
    dospeak(p);
}
int main()
{
    test();
    system("pause");
    return 0;
}
  • 收藏

2条回答 默认 最新

  • CSDN专家-Time 2021-08-05 09:03
    已采纳

    你新建之后没有free 所以这个指针一直在内存里。

    已采纳该答案
    1 打赏 评论
  • 穹龙 2021-08-05 09:22

    出现以下情况时,程序会执行析构函数
    1.若在一个函数中定义了一个对象(假设为自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前会自动执行析构函数;
    2.静态(static)局部对象在函数调用结束时,不释放对象,因此也不用调用析构函数,只有在main函数结束或调用exit函数结束程序时,才调用析构函数;
    3.若定义了一个全局对象,则程序的流程离开其作用域时(如main函数结束或调用exit函数)时,调用析构函数;
    4.new运算符动态建立的对象,当用delete运算符释放对象时,先调用析构函数

    打赏 评论

相关推荐 更多相似问题