Реализация деструктора в шаблоне SharedPointer

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

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

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

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

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

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

Условие

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

Ответ

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

При полях T* resource и std::size_t* refCount:

~SharedPointer() noexcept {
    if (refCount && --*refCount == 0) {
        delete resource;
        delete refCount;
    }
}

Это предполагает корректный счётчик не меньше 1 у непустого владельца, одиночный объект и не бросающий деструктор T. Copy, move и присваивание обязаны сохранять тот же инвариант. Для массива нужен иной deleter; для конкурентных владельцев — потокобезопасный управляющий блок.

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

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

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

Подробнее