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

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

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

Функція expired()

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

expired_function.h

expired_function.h

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() повертає це число.

use_count_function.h

use_count_function.h

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

reset_function.h

reset_function.h

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

Функція swap()

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

swap_function.h

swap_function.h

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

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

Виберіть правильну відповідь

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

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

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

Секція 1. Розділ 13

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Секція 1. Розділ 13
some-alt