std::weak_ptr<T>:: weak_ptr
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
weak_ptr::weak_ptr
|
||||
| Modifiers | ||||
| Observers | ||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Non-member functions | ||||
| Helper classes | ||||
|
(C++20)
|
||||
| Deduction guides (C++17) |
|
constexpr
weak_ptr
(
)
noexcept
;
|
(1) | (начиная с C++11) |
|
weak_ptr
(
const
weak_ptr
&
r
)
noexcept
;
|
(2) | (начиная с C++11) |
|
template
<
class
Y
>
weak_ptr ( const weak_ptr < Y > & r ) noexcept ; |
(2) | (начиная с C++11) |
|
template
<
class
Y
>
weak_ptr ( const std:: shared_ptr < Y > & r ) noexcept ; |
(2) | (начиная с C++11) |
|
weak_ptr
(
weak_ptr
&&
r
)
noexcept
;
|
(3) | (начиная с C++11) |
|
template
<
class
Y
>
weak_ptr ( weak_ptr < Y > && r ) noexcept ; |
(3) | (начиная с C++11) |
Создает новый
weak_ptr
, который потенциально разделяет объект с
r
.
weak_ptr
.
weak_ptr
, который разделяет объект, управляемый
r
. Если
r
не управляет объектом,
*
this
также не управляет объектом. Шаблонные перегрузки не участвуют в разрешении перегрузки, если только
Y*
не является неявно преобразуемым в
T*
, или
Y
является типом "массив из
N
U
" для некоторого типа
U
и некоторого числа
N
, и
T
является типом "массив неизвестной границы из (возможно cv-квалифицированного)
U
"
(начиная с C++17)
.
Y*
не является неявно преобразуемым в
T*
.
Содержание |
Параметры
| r | - | a std::shared_ptr or std::weak_ptr that will be viewed by this std::weak_ptr |
Примечания
Поскольку конструктор по умолчанию является
constexpr
, статические
std::weak_ptr
инициализируются как часть
статической нелокальной инициализации
, до начала любой динамической нелокальной инициализации. Это делает безопасным использование
std::weak_ptr
в конструкторе любого статического объекта.
Пример
#include <iostream> #include <memory> struct Foo {}; int main() { std::weak_ptr<Foo> w_ptr; { auto ptr = std::make_shared<Foo>(); w_ptr = ptr; std::cout << "w_ptr.use_count() inside scope: " << w_ptr.use_count() << '\n'; } std::cout << "w_ptr.use_count() out of scope: " << w_ptr.use_count() << '\n'; std::cout << "w_ptr.expired() out of scope: " << std::boolalpha << w_ptr.expired() << '\n'; }
Вывод:
w_ptr.use_count() inside scope: 1 w_ptr.use_count() out of scope: 0 w_ptr.expired() out of scope: true
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2315 | C++11 |
move semantic was not enabled for
weak_ptr
|
enabled |
Смотрите также
присваивает
weak_ptr
(публичная функция-член) |