конструктор копирования shared_ptr'а будет всё время обращаться к атомарному счётчику. И это достаточно большие накладные расходы, по сравнению с raw pointers и unique_ptr.
2. имеет смысл продумать lifetime объектов. Навскидку, вот, например, EventPtr: откуда берутся эти события? Они где-то хранятся, пока IListener их обрабатывает? Тогда в контейнере стоит хранить unique_ptr, а в Ilistener прокидывать weak_ptr. Если они нигде не хранятся и просто передаются по цепочке IListener'ов, то лучше мувать unique_ptr. Если таких гарантий нет, то да, shared_ptr — подходящий вариант.
А rvo не срабатывает тут?
Виков на юник не бывает
Обсуждают сегодня