Моя проблема в том, что shared_from_this
нельзя вызвать в
деструкторы, поэтому приведенный выше код будет выдавать исключение.
Будет выброшено исключение , поскольку срок его действия истек по определению в деструкторе.
Так что же вы хотите? Общий указатель с истекшим сроком действия? Просто создайте пустой общий указатель.
Или слабый указатель с истекшим сроком действия?
Возможно, если вы заметите, что «проблема» не в shared_from_this
броске (это симптом), а в том, что все владельцы уже изначально сброшены или уничтожены в этой точке, а срок действия слабых указателей истек и эквивалент к пустому стандартному слабому указателю (*), созданному по умолчанию, поэтому вам нужно просто передать инициализированный слабый указатель по умолчанию.
Также Subscriptions::Instance()->Remove(weak_OR_owning_pointer)
не имеет смысла в любом случае (со слабым или владеющим указателем), так как вы не можете сравнить слабый указатель с чем-либо, вы можете только попытаться заблокировать его (а затем выполнить сравнение).
Так что вы можете просто удалить устаревшие слабые указатели. Аргументы Remove
бесполезны.
(*) или что у вас есть очень серьезная двойная ошибка двойного владения уничтожаемым объектом!