Удалять подписку можно из того места, где происходит удаление экземпляра ClassB. Можно сделать это и автоматически, но тогда, как вы сказали, придётся сохранять ссылку на экземпляр ClassA. Как мне кажется, ничего особо плохого в этом нет, если ссылка будет использоваться только для удаления подписки.
Однако, в случае сохранения ссылки, нужно учесть, что при удалении экземпляра ClassA ссылка на него в экземпляре ClassB должна быть занулена. Узнать момент удаления можно, например, путём посылки из экземпляра CLassA события удаления. Это в том случае, если предполагается удалять экземпляр ClassA.
Вопрос номер 2: как вы, без использования событий, будете узнавать, что ширина экземпляра ClassA изменилась?
Вариант только один: хранить в нём ссылку на экземпляр ClassB и вызывать при изменении своей ширины какой-то метод этого экземпляра. Не находите это немного некрасивым? А если есть ещё третий, четвертый и т.д. экземпляры ClassB? Не забывайте также, что при удалении экземпляров ClassB ссылки на них нужно занулять. Вот здесь, по-моему, как раз и начинается настоящий гемор
Добавлено через 2 минуты
А, да, есть ещё один вариант: в экземпляре ClassB повесить на этерфрейм (или таймер) обработчик, который будет сравнивать ширину экземпляра ClassA со своей, и, в случае несовпадения, обновлять свою ширину. Этот метод для настоящих извращенцев
