Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Створення та Використання Weak Вказівників | Слабкі Вказівники
Розумні Вказівники C++
course content

Зміст курсу

Розумні Вказівники C++

Розумні Вказівники C++

1. Вступ до Розумних Вказівників
2. Унікальні Вказівники
3. Спільні Вказівники
4. Слабкі Вказівники
5. Просунуті Теми

book
Створення та Використання Weak Вказівників

Створення слабких вказівників

Зазвичай слід створювати std::weak_ptr з існуючого std::shared_ptr. Це гарантує, що слабкий вказівник спостерігає за об'єктом, який вже управляється принаймні одним спільним вказівником.

h

creating_weak_pointer

copy
12
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);

std::weak_ptr p_weak створюється з існуючого std::shared_ptr p_shared. Це означає, що p_weak не збільшує лічильник посилань p_shared, а натомість спостерігає за тим самим керованим об'єктом. Дійсність p_weak залежить від p_shared; якщо всі екземпляри std::shared_ptr, які керують об'єктом, знищені, p_weak стає недійсним і більше не може використовуватися для прямого доступу до об'єкта.

Використання слабких вказівників

Щоб отримати доступ до об'єкта, керованого std::weak_ptr, спочатку потрібно перетворити його на std::shared_ptr за допомогою lock(). Цей метод перевіряє, чи об'єкт все ще існує, і повертає std::shared_ptr до нього, а в іншому випадку повертає порожній std::shared_ptr.

Блокування слабкого вказівника запобігає знищенню об'єкта під час використання. Оскільки std::weak_ptr не впливає на лічильник посилань, прямий доступ до об'єкта може призвести до використання знищеного екземпляра. Перетворення його на std::shared_ptr збільшує лічильник посилань, забезпечуючи дійсність об'єкта під час використання.

h

converting

copy
12345
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Завдання

Swipe to start coding

Завершіть наступний код, щоб створити std::weak_ptr з std::shared_ptr, перетворити його назад на std::shared_ptr і безпечно отримати значення керованого об'єкта.

Рішення

cpp

solution

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 2
toggle bottom row

book
Створення та Використання Weak Вказівників

Створення слабких вказівників

Зазвичай слід створювати std::weak_ptr з існуючого std::shared_ptr. Це гарантує, що слабкий вказівник спостерігає за об'єктом, який вже управляється принаймні одним спільним вказівником.

h

creating_weak_pointer

copy
12
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);

std::weak_ptr p_weak створюється з існуючого std::shared_ptr p_shared. Це означає, що p_weak не збільшує лічильник посилань p_shared, а натомість спостерігає за тим самим керованим об'єктом. Дійсність p_weak залежить від p_shared; якщо всі екземпляри std::shared_ptr, які керують об'єктом, знищені, p_weak стає недійсним і більше не може використовуватися для прямого доступу до об'єкта.

Використання слабких вказівників

Щоб отримати доступ до об'єкта, керованого std::weak_ptr, спочатку потрібно перетворити його на std::shared_ptr за допомогою lock(). Цей метод перевіряє, чи об'єкт все ще існує, і повертає std::shared_ptr до нього, а в іншому випадку повертає порожній std::shared_ptr.

Блокування слабкого вказівника запобігає знищенню об'єкта під час використання. Оскільки std::weak_ptr не впливає на лічильник посилань, прямий доступ до об'єкта може призвести до використання знищеного екземпляра. Перетворення його на std::shared_ptr збільшує лічильник посилань, забезпечуючи дійсність об'єкта під час використання.

h

converting

copy
12345
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Завдання

Swipe to start coding

Завершіть наступний код, щоб створити std::weak_ptr з std::shared_ptr, перетворити його назад на std::shared_ptr і безпечно отримати значення керованого об'єкта.

Рішення

cpp

solution

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 2
Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Ми дуже хвилюємося, що щось пішло не так. Що трапилося?
some-alt