Профессионалы там,
это первый раз, когда я на самом деле отправляю вопрос на эту доску, который очень помог мне в прошлом. Я все еще начинающий программист и пытаюсь многое узнать о программировании & разработка программного обеспечения в последние несколько месяцев.
Недавно я занялся темой «c ++ 11-Smart Pointers» и решил переписать все шаблоны проектирования, которые я выучил несколькими неделями ранее, включая «Шаблон наблюдателя» с использованием shared_ptr. & weak_ptr для управления ресурсами.
Когда я пытался написать простую реализацию паттерна наблюдателя (как, например, в «Эталонном дизайне Head First» или «Эскизы проектирования Э. Гаммы»), используя интерфейсный класс как для наблюдаемых субъектов, так и для наблюдателей, и ровно один конкретный класс для каждого Я получил различные сообщения об ошибках из Visual Studio.
Я просто не понимаю, как объединить shared_ptr и weak_ptr в этом шаблоне, что может быть связано с тем, что я до сих пор не до конца понимаю комбинацию обоих.
К сожалению, даже тщательный поиск в Интернете не дал мне простого примера «паттерна наблюдателя с использованием умного указателя», который может служить для меня ориентиром.
Поэтому мне было интересно, если один из вас, ребята, узнает, где найти такую простую имплементацию, или будет так любезен, предоставьте мне свой собственный. Оба были бы действительно очень полезны 🙂
большое спасибо
coderAndi
Шаблон наблюдателя является типичным примером случая, когда умный
указатели (по крайней мере, обычные кандидаты) неуместны.
Ни субъект, ни объект не «владеют» друг другом; у каждого есть
его собственная продолжительность жизни. На самом деле, одно частое использование наблюдателя
шаблон, когда объект имеет указатель на другой объект, который
это не принадлежит. Регистрируется как наблюдатель, чтобы быть
сообщается, когда наблюдаемый объект разрушен.
Для меня это звучит так, будто ты нападаешь на все это
в обратном направлении. У вас есть решение (умные указатели), и вы
пытаясь сделать каждую проблему подходящей. Это никогда не работает.
Других решений пока нет …