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

Свайпніть щоб показати меню

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

Запитати АІ

expand
ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

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