В настоящее время я создаю свой собственный итератор для b-дерева, и я застрял в том, как реализовать оператор постинкремента без жалоб компилятора.
Сообщение об ошибке выглядит следующим образом и ожидается (поскольку я делаю именно то, что говорится в сообщении об ошибке)
cc1plus: warnings being treated as errors
error: reference to local variable 'temp' returned
Мне нужно написать функцию с тегами -Wall и -Werror, поэтому, надеюсь, кто-то сможет помочь мне с решением этой проблемы.
Вот функция:
template <typename T> btree_iterator<T>& btree_iterator<T>::operator++(int) {
btree_iterator<T> temp(*this);
pointee_ = pointee_->nextNode();
return temp;
}
Я осмотрелся и смог найти только примеры людей, реализующих оператор именно так, как я на данный момент.
Всякий раз, когда у меня раньше возникала подобная проблема, я «обновлял» возвращаемый объект, чтобы он больше не был временным. Но поскольку это итератор, если я это сделаю, я не смогу впоследствии освободить память и, таким образом, возникнут утечки памяти.
Если кто-то может мне помочь, это будет очень признательно! Пожалуйста, дайте мне знать, если есть что-то еще в моем дизайне, что поможет вам понять проблему.
С Уважением.