инициализация — как повторно инициализировать объект повторно?

Я пытаюсь реализовать эту логику в C ++:

Object obj(args);
while (obj.isOK()) {
obj = obj.next();
}

Но я не могу использовать этот точный код, потому что Object наследуется boost::noncopyable поэтому он не имеет оператора присваивания. Я могу добавить методы и конструкторы Object(но не сделать его копируемым), однако я бы предпочел не делать этого. Другие вопросы имеют ручное уничтожение и размещение нового в качестве решения, которое я мог бы сделать, если бы я создал новый конструктор для Object, но, опять же, желательно, чтобы мне не понадобился новый конструктор, и это все равно кажется довольно неприятным решением. Какие у меня есть альтернативы?

4

Решение

Делать Object::next мутировать Object на месте. поскольку Object не копируется, это кажется единственной разумной вещью для Object::next делать в любом случае.

3

Другие решения

Что значит Object::next вернуть?
Если он возвращает свежий Object Вы можете добавить оператор присваивания Object:

Object& operator=(Object&& obj)
{
//move its iternal state to this and then
return *this;
}

Таким образом, дублирование данных не происходит, и на самом деле ничего не копируется.

-1

По вопросам рекламы [email protected]