Re[2]: Обращение к защищенному деструктору из наследника
От: Bell Россия  
Дата: 15.07.11 02:04
Оценка:
Здравствуйте, i-gen, Вы писали:

IG>Дело в том, что Вы внутри метода B::deleter обращаетесь к глобальному оператору delete который пытается вызвать деструктор A::~A — а это ему не позволено (деструктор не public, а оператор delete не член классов A или B.

Совершенно неверно. Не нужно путать выражение delete (delete expression) и оператор delete. Оператор delete никаких деструкторов не вызывает, его дело — освободить память. Работу по вызову деструктора и последующему вызову operator delete выполняет выражение delete, и делается все это в контексте использования, т.е. в данном случае в контексте метода B::deleter.

IG>Решением могло бы быть определение оператора delete (как члена) внутри класса A (а вместе с ним определять и симметричный оператор new).

Это решение к настоящей проблеме никак не относится.

IG>Еще одним (возможным) решением было бы добавить в класс A запись: friend operator delete (так не пользовал — не уверен, что верно)

Правильно, что не уверен. Неверно это.
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.