Нет, пользовательский удалитель никогда не потеряется.
Когда вы lock()
ваш weak_ptr
, вы получаете shared_ptr
с тем же пользовательским удалителем (и другими атрибутами), который вы используете для созданияweak_ptr
в первую очередь.
Однако, если shared_ptr
больше не ссылается на ваш weak_ptr
, lock()
завершится ошибкой и вернет ноль shared_ptr
.
То есть вам не нужно заботиться о пользовательском удалителе.Если вы указали его при создании shared_ptr
, он будет вызван, когда будет освобожден последний связанный shared_ptr
.