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. Це гарантує, що слабкий вказівник спостерігає за об'єктом, який вже управляється принаймні одним спільним вказівником.

creating_weak_pointer.h

creating_weak_pointer.h

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 збільшує лічильник посилань, забезпечуючи дійсність об'єкта під час використання.

converting.h

converting.h

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 і безпечно отримати значення керованого об'єкта.

Рішення

solution.cpp

solution.cpp

Все було зрозуміло?

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

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

Секція 4. Розділ 2
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Suggested prompts:

Can you show an example of how to create a std::weak_ptr from a std::shared_ptr?

How do I check if a std::weak_ptr is still valid before using it?

What happens if I try to access an expired std::weak_ptr?

close

Awesome!

Completion rate improved to 5.56

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

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

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

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

creating_weak_pointer.h

creating_weak_pointer.h

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 збільшує лічильник посилань, забезпечуючи дійсність об'єкта під час використання.

converting.h

converting.h

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 і безпечно отримати значення керованого об'єкта.

Рішення

solution.cpp

solution.cpp

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

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

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

close

Awesome!

Completion rate improved to 5.56
Секція 4. Розділ 2
single

single

some-alt