Есть класс в котором есть вот такая переменная
PoolWrapper<FrameManager> m_PoolWrapperFrameManager;
Вот ее имплементация
public:
PoolWrapper() = default;
PoolWrapper(TYPE *obj, int index, ObjPool<TYPE> *objPool);
~PoolWrapper();
PoolWrapper(const PoolWrapper &) = delete;
PoolWrapper(PoolWrapper &&other)
{
this->m_index = other.m_index;
this->m_obj = other.m_obj;
this->m_objPool = other.m_objPool;
other.m_index = EMPTY_INDEX;
other.m_obj = nullptr;
other.m_objPool = nullptr;
}
Теперь я хочу в эту переменную m_PoolWrapperFrameManager
мувнуть обьект из очереди.
Делаю это вот так
m_PoolWrapperFrameManager = std::move(m_fifo.dequeue());
И вот метод dequeue()
PoolWrapper<FrameManager> dequeue()
{
std::unique_lock<std::mutex> lock(m_mutex);
while (m_queue.empty())
{
// release lock as long as the wait and reaquire it afterwards.
m_condition.wait(lock);
}
PoolWrapper<FrameManager> val = std::move(m_queue.front());
m_queue.pop();
return val;
}
В итоге получаю вот такую ошибку
error: object of type 'PoolWrapper<FrameManager>' cannot be assigned because its copy assignment operator is implicitly deleted
Что делаю не так?
Определите оператор присваивания, у вас его а нет.
PoolWrapper& operator=(PoolWrapper &&other) {
this->~PoolWrapper();
return *new(this) PoolWrapper(std::move(other));
}
Видимо вы надеетесь на то, что компилятор неявно сгенерирует этот оператор за вас, однако этого не произойдет, так как у вас явно определен конструктор копирования и перемещения. Компилятор никогда не генерирует копирующие / перемещающие конструкторы и операторы присваивания, если явно определен хотя бы один из них. Соответственно в такой ситуации операторы необходимо определять явно.
Кроме того, конструктор перемещения у вас реализован как копирующий: поля класса инициализируются по-умолчанию, а затем им присваиваются новые значения посредством оператора копирования.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно подключить SFML для работы в VS Code на WindowsНикакой адекватной информации не нашел, разве что для Linux
Не совсем могу понять как в шестой строке функция передаётся в качестве параметраКак я понял, код string(*fun)() должен обьявлять указатель fun, которому...
Составил небольшой примерКомпилятор не может найти тип ref как возвращаемое значение метода getA()
При специализации шаблона под конкретный тип, общий класс используется на ура, а специализация, использующая то же определение метода, что...