Класс с умным указателем и соблюдением правила пяти

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

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

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

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

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

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

Условие

Необходимо реализовать класс, внутри которого хранится объект типа std::shared_ptr. Требуется полностью реализовать правило пяти: пользовательский конструктор копирования, оператор копирования, конструктор перемещения, оператор перемещения и деструктор.

class MyClass {
    std::shared_ptr<int> data;

public:
    // правило пяти
};

Ответ

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

#include <memory>

class MyClass {
    std::shared_ptr<int> data;
public:
    MyClass() = default;
    MyClass(const MyClass&) = default;
    MyClass& operator=(const MyClass&) = default;
    MyClass(MyClass&&) noexcept = default;
    MyClass& operator=(MyClass&&) noexcept = default;
    ~MyClass() = default;
};

Это явное оформление правила пяти без дублирования логики shared_ptr. Если нужны собственные тела для демонстрации, в copy-операциях копируйте data, в move — присваивайте std::move(other.data). Для реального класса без дополнительных ресурсов предпочтительно правило нуля: вообще не объявлять эти операции.

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

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

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

Подробнее