Чудово!
Completion показник покращився до 5.56single
Створення та Використання 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 і безпечно отримати значення керованого об'єкта.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат