Когда я нахожусь внутри деструктора, возможно ли, что какой-то другой поток начнет выполнять функцию-член объекта? Как справиться с этой ситуацией?





Вы не должны уничтожать объект, если не уверены, что никто другой не будет пытаться его использовать - в идеале ничто другое не имеет ссылки на него. Вам нужно будет более внимательно присмотреться к вызову delete.
Спасибо. Однако я должен предположить, что ответ Дугласа Лидера более полный, чем мой.
C++ не имеет внутренней защиты от использования объекта после его удаления - забудьте об условиях гонки - другой поток может использовать ваш объект после его полного удаления.
Либо:
Хорошим советом было бы использовать boost::shared_ptr<> для подсчета ссылок. Он также поддерживает такие конструкции, как weak_ptr<> или enable_shared_from_this, что значительно упрощает некоторые полезные части управления временем жизни.
К сожалению, следование любому совету недостаточно, чтобы избежать потенциальной гонки данных. Представьте: поток A создает объект и передает ссылку на поток B. В B вызывается изменяющаяся функция-член. Позже A уничтожает объект, которому требуется доступ к переменной-члену.
Если вы находитесь в деструкторе из-за раскручивания стека в обработчике исключений, я предлагаю перестроить ваш код таким образом, чтобы вы перехватывали исключения в сериализованном блоке.
После блока вы проверяете, действителен ли объект, и вызываете свой метод. Таким образом, исключение в одном потоке позволит другим потокам изящно обрабатывать вызов деструктора.
Если ваш объект используется более чем одним потоком, исключение не должно вызывать его уничтожение.
Идеальный, простой ответ. В дальнейшем это может происходить не только внутри деструктора, но и после того, как вы покинули деструктор. Язык не исправит плохой дизайн.