Если у Наблюдателя есть указатель (или ссылка) на Наблюдаемое, и Наблюдаемое уничтожено, этот указатель будет недействительным. Автор просто пытается избежать висящих ссылок.
Думаю, есть три обычных решения.
Один из них заключается в том, чтобы делать именно то, что делает этот код, возможно, вызывая abort (), а не вызывать исключение в деструкторе.
Другой способ состоит в том, чтобы деструктор Observable отменил регистрацию у любых наблюдателей.
Последнее - использовать «умные указатели» (например, счетчик ссылок shared_ptr
), чтобы гарантировать, что наблюдаемый переживет любого наблюдателя.