Створення та Використання Weak Вказівників
Створення слабких вказівників
Зазвичай слід створювати std::weak_ptr
з існуючого std::shared_ptr
. Це гарантує, що слабкий вказівник спостерігає за об'єктом, який вже управляється принаймні одним спільним вказівником.
creating_weak_pointer.h
12std::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
збільшує лічильник посилань, забезпечуючи дійсність об'єкта під час використання.
converting.h
12345auto 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
і безпечно отримати значення керованого об'єкта.
Рішення
solution.cpp
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 5.56
Створення та Використання Weak Вказівників
Свайпніть щоб показати меню
Створення слабких вказівників
Зазвичай слід створювати std::weak_ptr
з існуючого std::shared_ptr
. Це гарантує, що слабкий вказівник спостерігає за об'єктом, який вже управляється принаймні одним спільним вказівником.
creating_weak_pointer.h
12std::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
збільшує лічильник посилань, забезпечуючи дійсність об'єкта під час використання.
converting.h
12345auto 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
і безпечно отримати значення керованого об'єкта.
Рішення
solution.cpp
Дякуємо за ваш відгук!
Awesome!
Completion rate improved to 5.56single