Boost :: Strong_ptr взаимодействие с пользовательским удалителем - PullRequest
2 голосов
/ 01 сентября 2010

У меня есть boost::shared_ptr с пользовательским приложением для удаления.При преобразовании этого в weak_ptr информация об удалении теряется?Если да, то как мне присоединить тот же самый удалитель к shared_ptr -ам, полученным с помощью метода weak_ptr::lock()?

Реализуемая мной функция - это контейнер weak_ptr -с, указывающий на живые экземпляры некоторыхтип.Мне нужно пользовательское средство удаления, чтобы удалить запись контейнера для удаляемых объектов.

1 Ответ

2 голосов
/ 01 сентября 2010

Нет, пользовательский удалитель никогда не потеряется.

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

Однако, если shared_ptr больше не ссылается на ваш weak_ptr, lock() завершится ошибкой и вернет ноль shared_ptr.

То есть вам не нужно заботиться о пользовательском удалителе.Если вы указали его при создании shared_ptr, он будет вызван, когда будет освобожден последний связанный shared_ptr.

...