Копирующий конструктор должен разделить с исходным объектом и ресурс, и общий счётчик, увеличив счётчик на единицу. Для пустого указателя увеличивать нечего.
Реализация копирующего конструктора в шаблоне 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 подходит только для учебного однопоточного варианта; нужны также корректные операторы присваивания.