Обнаружение разрушения производного класса из базового классаC++

Программы на C++. Форум разработчиков
Anonymous
Обнаружение разрушения производного класса из базового класса

Сообщение Anonymous »

Вопрос
В C++ производный деструктор cass вызывается перед деструктором базового класса при уничтожении объекта. Можно ли автоматически уведомить базовый класс (т.е. вызвать функцию-член базового класса) об уничтожении производного класса? Я могу вручную вызвать функцию уведомления базового класса в деструкторе производного класса, но пользователям придется всегда не забывать вставлять эту строку всякий раз, когда они наследуют от базового класса, чего я хочу избежать.
Фон
Я создаю многопоточную структуру, в которой объект класса MyObject, наследуемый от класса GeneralObject, доступен из двух разных потоков (основной поток и производитель нить). Когда объект разрушается в основном потоке, вызывается деструктор MyObject, после чего деструктор класса GeneralObject удаляет себя из таблицы допустимых объектов, где все Сохраняется «действительный» указатель полиморфного объекта GeneralObject. Это не позволяет потоку-производителю получить доступ к объекту, который больше не существует. Проблема в том, что за короткий промежуток времени между вызовом деструктора MyObject и вызовом деструктора GeneralObject указатель, хранящийся в таблице допустимых объектов, становится висячим указателем. Конечно, он будет удален в деструкторе GeneralObject, но поскольку поток-производитель может попытаться получить доступ к объекту в течение этого короткого периода времени, это небезопасно. Мне нужна функция GeneralObject, которая удаляет себя из таблицы и вызывается при уничтожении MyObject.

Вернуться в «C++»