Здравствуйте, RikkiTikkiTavi, Вы писали:
RTT>Здравствуйте!
RTT>Вроде бы неплохо знаю С++, но вот столкнулся с непоняткой:
RTT>RTT>class A
RTT>{
RTT>protected:
RTT> A() {}
RTT> virtual ~A() {}
RTT>};
RTT>class B
RTT> : public A
RTT>{
RTT>protected:
RTT> B() {}
RTT> virtual ~B() {}
RTT>public:
RTT> void deleter(A* p) {
RTT> if (p)
RTT> delete p; error C2248: 'A::~A' : cannot access protected member declared in class 'A'
RTT> }
RTT>};
RTT>
RTT>
RTT>Почему не могу вызвать деструктор базового класса из наследника?
Потому что класс A ничего не знает о классе B, а деструктор protected. Ты хочешь удалить не this (можно), а левый объект класса A.