Why is my destructor never called?

后端 未结 4 1366
温柔的废话
温柔的废话 2021-02-20 01:07

I have a base class A and a derived class B:

class A
{
public:
    virtual f();
};

class B : public A
{
public:
     B()
     {
         p = new char [100];
            


        
相关标签:
4条回答
  • 2021-02-20 01:10

    try this:

    class A
    {
    public:
        virtual ~A() {}
        virtual f();
    };
    
    class B : public A
    {
    public:
         B()
         {
             p = new char [100];
         }
         virtual ~B() // virtual keywork optional but occasionally helpful for self documentation.
         {
             delete [] p;
         }
         f();
    private:
        char *p;
    };
    
    0 讨论(0)
  • 2021-02-20 01:22

    If your variable is of type A it doesn't have a virtual destructor and so it won't look at the actual runtime type of the object to determine it needs to call the desstructor

    Add an empty destructor to A

    virtual ~A() {}

    and that should fix it.

    In general you need to do this on any class that can possibly be used as a base class.

    0 讨论(0)
  • 2021-02-20 01:27

    Class A should have a virtual destructor. Without that, derive class destructors won't be called.

    0 讨论(0)
  • 2021-02-20 01:35

    Your base class needs a virtual destructor. Otherwise the destructor of the derived class will not be called, if only a pointer of type A* is used.

    Add

    virtual ~A() {};
    

    to class A.

    0 讨论(0)
提交回复
热议问题