Зміст курсу
Розумні Вказівники C++
Розумні Вказівники C++
Створення та Використання Weak Вказівників
Створення слабких вказівників
Зазвичай слід створювати std::weak_ptr
з існуючого std::shared_ptr
. Це гарантує, що слабкий вказівник спостерігає за об'єктом, який вже управляється принаймні одним спільним вказівником.
creating_weak_pointer
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
збільшує лічильник посилань, забезпечуючи дійсність об'єкта під час використання.
converting
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
і безпечно отримати значення керованого об'єкта.
Рішення
solution
Дякуємо за ваш відгук!
Створення та Використання Weak Вказівників
Створення слабких вказівників
Зазвичай слід створювати std::weak_ptr
з існуючого std::shared_ptr
. Це гарантує, що слабкий вказівник спостерігає за об'єктом, який вже управляється принаймні одним спільним вказівником.
creating_weak_pointer
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
збільшує лічильник посилань, забезпечуючи дійсність об'єкта під час використання.
converting
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
і безпечно отримати значення керованого об'єкта.
Рішення
solution
Дякуємо за ваш відгук!