Зміст курсу
Розумні Вказівники C++
Розумні Вказівники C++
Важливі Функції Слабких Вказівників
Функція expired()
Перед викликом lock()
, ви можете перевірити, чи все ще дійсний слабкий вказівник, використовуючи метод expired()
. Ця функція повертає true
, якщо об'єкт було знищено, і false
в іншому випадку.
expired_function
// 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
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
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
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
.
Дякуємо за ваш відгук!