У меня есть простая оболочка RAII для управления определенным ресурсом. Вот интерфейс:
struct ResourceWrapper
{
explicit ResourceWrapper(RESOURCE resource);
ResourceWrapper(const ResourceWrapper& other);
ResourceWrapper& operator=(const ResourceWrapper& other);
~ResourceWrapper();
ResourceWrapper(ResourceWrapper&& other) = delete;
ResourceWrapper& operator=(ResourceWrapper&& other) = delete;
};
Проблема здесь в том, что я больше не могу использовать этот класс с std
контейнерами и алгоритмами, как только я явно удалю оператор присваивания перемещения. И, очевидно, мне нужно либо удалить, либо правильно реализовать его, поскольку я только что научился на собственном горьком опыте.
Другой альтернативой может быть реализация присваивания перемещения с помощью обычного оператора присваивания, но я не уверен, как это сделать правильно. Полагаю, мне нужно что-то вроде std::remove_reference
? Интересно, удалит ли он слишком много ссылок и приведет к созданию ненужного временного объекта.