Реализация копирующего конструктора в шаблоне SharedPointer

Копирующий конструктор должен разделить с исходным объектом и ресурс, и общий счётчик, увеличив счётчик на единицу. Для пустого указателя увеличивать нечего.

Короткий ответ

Что ответить на собеседовании

Копирующий конструктор должен разделить с исходным объектом и ресурс, и общий счётчик, увеличив счётчик на единицу. Для пустого указателя увеличивать нечего.

Подробный разбор

Ответ с пояснениями

Условие

Требуется добавить в шаблонный класс SharedPointer метод‑конструктор копирования, который при создании нового объекта будет повышать счётчик ссылок на управляемый ресурс.

Ответ

Копирующий конструктор должен разделить с исходным объектом и ресурс, и общий счётчик, увеличив счётчик на единицу. Для пустого указателя увеличивать нечего.

При полях T* resource и std::size_t* refCount конструктор внутри шаблона выглядит так:

SharedPointer(const SharedPointer& other) noexcept
    : resource(other.resource), refCount(other.refCount) {
    if (refCount) ++*refCount;
}

Не создавайте новый счётчик и не копируйте сам T: это уже другие правила владения. Деструктор должен уменьшать этот же счётчик и удалять ресурс лишь при достижении нуля. Обычный size_t подходит только для учебного однопоточного варианта; нужны также корректные операторы присваивания.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее