Что означает «(1,) == 1» в Python?

class B
{
public:
    B()
    {
       p = new int[1024];  
    }
    virtual ~B()
    {
        cout<<"B destructor"<<endl;
        //p will not be deleted EVER unless you do it manually.
    }
    int *p;
};


class D : public B
{
public:
    virtual ~D()
    {
        cout<<"D destructor"<<endl;
    }
};

Когда вы выполните:

B *pD = new D();
delete pD;

Деструктор будет вызываться, только если ваш базовый класс имеет ключевое слово virtual.

Тогда, если у вас не было виртуального деструктора, вызывается только ~ B (). Но поскольку у вас есть виртуальный деструктор, вызывается первая ~ D (), а затем ~ B ().

Никакие члены B или D, выделенные в куче, не будут освобождены, если вы их явно не удалите. И удаление их также вызовет их деструктор.

118
задан Community 23 May 2017 в 12:25
поделиться