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
Вступ до Спільних Вказівників

Так само, як і унікальний вказівник, спільний вказівник використовується для виділення та зберігання адреси динамічно виділеного об'єкта. Основна відмінність між цими двома типами вказівників полягає в тому, що спільний вказівник за дизайном є спільним. Він може безпечно мати більше ніж одного власника. Насправді, його слід використовувати лише тоді, коли вам потрібно, щоб об'єкт мав кілька власників.

Як працюють спільні вказівники?

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

Коли спільний вказівник виходить за межі області видимості або явно скидається, лічильник посилань автоматично зменшується. Як тільки лічильник посилань досягає 0, це означає, що жоден спільний вказівник більше не посилається на об'єкт, і пам'ять об'єкта автоматично звільняється.

h

shared_pointer

copy
1234567891011121314151617181920212223242526272829303132333435363738394041
#include <iostream> template <typename T> class SharedPointer { public: explicit SharedPointer(T* ptr = nullptr) : pointer(ptr), reference_count(new int(1)) {} SharedPointer(const SharedPointer& other) : pointer(other.pointer), reference_count(other.reference_count) { (*reference_count)++; } SharedPointer& operator=(const SharedPointer& other) { if (this != &other) { if (--(*reference_count) == 0) { delete pointer; delete reference_count; } pointer = other.pointer; reference_count = other.reference_count; (*reference_count)++; } return *this; } ~SharedPointer() { if (--(*reference_count) == 0) { delete pointer; delete reference_count; } } T* operator->() const { return pointer; } T& operator*() const { return *pointer; } private: T* pointer; int* reference_count; };

Це безпомилковий спосіб забезпечити безпечне спільне володіння динамічними даними. Оскільки, навіть при спільному використанні даних, програма менш схильна до витоків/пошкоджень пам'яті, і вам не потрібно вручну викликати delete.

question mark

Коли збільшується лічильник посилань спільного вказівника?

Select the correct answer

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

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

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

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