#include<iostream>
class base
{
public:
virtual ~base(){std::cout << "base\n";}
};
class derived : public base
{
private:
~derived(){std::cout << "derived\n";} /* destructor is private */
};
int main()
{
base *pt= new derived;
delete pt;
}
Вышеупомянутая программа компилируется и работает нормально. Как вызываемый дескриптор производного класса называется private?Как вызвать деструктор производного класса в качестве приватного в следующей программе?
Ожидаете ли вы ошибку времени компиляции или ошибку во время выполнения? –
Я бы не ошиблась. Мне интересно узнать, как в приведенной выше программе деструктор получает вызов! (он не должен вызываться, поскольку он был объявлен в частном спецификаторе.) –
Если его не следует вызывать, но вы все равно пытаетесь его вызывать, тогда в какой-то момент должна появиться ошибка. Я спрашиваю вас, в какой момент вы считаете разумным и целесообразным сигнализировать об этой ошибке. –