слабый_ptrшаблон класса хранит «слабую ссылку» на объект, который уже управляетсяshared_ptr. Для доступа к объекту слабый_ptrможет быть преобразован в общий_ptr.Использованиеshared_ptrКонструктор или блокировка функции элемента. Когда последнийshared_ptrуходит к объекту и объект удаляется, попытка получитьshared_ptrотweak_ptrнеудачна: конструктор бросит исключение типа bad_weak_ptr, а weak_ptr::lock вернет пустоеShared_ptr.
Каждыйweak_ptrотвечает требованиям CopyConstructible и Assignable Стандартной библиотеки C++ и поэтому может использоваться в стандартных библиотечных контейнерах. Операторы сравнения поставляются так, чтоweak_ptrработает с ассоциативными контейнерами стандартной библиотеки.
Эффекты: Если r пуст, строится пустое<weak_ptr>; в противном случае строится<weak_ptr>, которое разделяет право собственности с r, как если бы путем хранения копии указателя, хранящегося в r.
Эффекты: Если r пуст, строится пустое<weak_ptr>; в противном случае строится<weak_ptr>, который разделяет право собственности с r, как если бы он хранил копию указателя, хранящегося в r
Возвращение: 0 если *это пусто; в противном случае, количество<shared_ptr>объектов, которые разделяют право собственности с *это.
Бросок: ничего.
Примечание: использование_count() не обязательно эффективно. Используйте только для отладки и тестирования, а не для производственного кода.
<
boolexpired()const;
>
Возврат: Возврат: use_count() == 0.
Бросок: ничего.
Примечания: просроченный() может быть быстрее, чем используйте_count().
<
voidreset();
>
Эффекты: Эквивалентно: слабый_ptr(.swap(*this).
<
voidswap(this_type&other);
>
Эффекты: Обменяется содержанием двух умных указателей.
Бросок: ничего.
Статья Class template weak_ptr раздела The Boost C++ Libraries BoostBook Documentation Subset Indexes and Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.