Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Важливі Функції Слабких Вказівників | Слабкі Вказівники
Розумні Вказівники C++
course content

Зміст курсу

Розумні Вказівники C++

Розумні Вказівники C++

1. Вступ до Розумних Вказівників
2. Унікальні Вказівники
3. Спільні Вказівники
4. Слабкі Вказівники
5. Просунуті Теми

book
Важливі Функції Слабких Вказівників

Функція expired()

Перед викликом lock(), ви можете перевірити, чи все ще дійсний слабкий вказівник, використовуючи метод expired(). Ця функція повертає true, якщо об'єкт було знищено, і false в іншому випадку.

h

expired_function

copy
1234567891011
// Call `expired()` before `lock()` if (!p_weak.expired()) { // Lock only if the object is still alive auto p_shared = p_weak.lock(); p_shared->update(); } else { std::cout << "Object no longer exists" << std::endl; }

Виклик expired() перед блокуванням слабкого вказівника допомагає визначити, чи існує ще посиланий об'єкт.

Функція use_count()

Хоча слабкий вказівник не впливає на лічильник посилань об'єкта, може бути корисно знати, скільки екземплярів std::shared_ptr керують тим самим об'єктом. Функція use_count() повертає це число.

h

use_count_function

copy
12345
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr); // Should output one std::cout << p_weak.use_count() << std::endl;

Функція reset()

Щоб звільнити слабкий вказівник від спостереження за об'єктом, використовуйте функцію reset(). Це робить слабкий вказівник порожнім, тобто він більше не вказує на жоден об'єкт.

h

reset_function

copy
1234
std::weak_ptr<int> p_weak(sharedPtr); // After this, `p_weak` no longer observes the `p_shared` object p_weak.reset();

Функція swap()

Функція swap() може бути використана для обміну вмістом двох слабких вказівників. Це особливо корисно, коли ви хочете змінити об'єкти, які спостерігають два слабкі вказівники, без зміни володіння або тривалості життя динамічних об'єктів.

h

swap_function

copy
12345678
std::shared_ptr<int> p_shared_A = std::make_shared<int>(10); std::shared_ptr<int> p_shared_B = std::make_shared<int>(20); std::weak_ptr<int> p_weak_A(p_shared_A); std::weak_ptr<int> p_weak_B(p_shared_B); // Swaps the objects `p_weak_A` and `p_weak_B` p_weak_A.swap(weakPtrB);

спочатку p_weak_A спостерігає за об'єктом, яким керує p_shared_A, тоді як p_weak_B спостерігає за об'єктом, яким керує p_shared_B.

Після виклику swap(), p_weak_A починає спостерігати за об'єктом, яким керує p_shared_B, а p_weak_B спостерігає за об'єктом, яким керує p_shared_A.

question mark

Яку функцію слід використовувати, якщо ви хочете перевірити, чи існує ще ресурс, на який вказує слабкий вказівник?

Select the correct answer

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

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

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

Секція 4. Розділ 4
Ми дуже хвилюємося, що щось пішло не так. Що трапилося?
some-alt