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

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

Сообщение Anonymous »

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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