В ваших комментариях написано " НЕТ глобальных членов, которые доступны здесь", так что я бы не догадался. Только поток, создавший объект, должен уничтожить его, поэтому от какого другого потока вы будете его защищать?
Мне нравится упорядоченное создание и уничтожение самостоятельно, когда только один объект когда-либо владеет другим подобъектом, а любой другой объект со ссылкой на этот подобъект является потомком ниже в дереве. Если какой-либо из этих подобъектов представляет разные потоки, то он обязательно завершится до того, как уничтожение продолжится вверх по дереву.
Пример:
- main () создать объект A
- объект A содержит объект B
- объект B содержит объект C
- объект C создает поток, который обращается к объектам A и B
- Деструктор объекта C запускается, ожидая завершения потока
- Деструктор объекта B запускается
- Деструктор объекта А работает
- main () возвращает
Деструкторам для объектов A и B вообще не нужно думать о потоках, а деструктору объекта C нужно только реализовать некоторый механизм связи (например, ожидание события) с потоком, который он выбрал для создания сам.
Вы можете столкнуться с проблемами, только если начнете раздавать ссылки (указатели) на ваши объекты произвольным потокам, не отслеживая, когда эти потоки создаются и уничтожаются, но если вы делаете это, вам следует использовать подсчет ссылок. и если да, то уже слишком поздно, когда вызывается деструктор. Если до сих пор есть ссылка на объект, то никто не должен был даже пытаться вызвать его деструктор.