В настоящее время я создаю свой собственный итератор для 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;
}
Я огляделся по сторонам, и мне удалось найти только примеры людей, которые реализуют оператор именно так, как я сейчас.
Всякий раз, когда у меня раньше была такая проблема, я «обновлял» объект, который возвращал, чтобы он больше не был временным. Но так как это итератор, если я это сделаю, я не смогу впоследствии освободить память и, следовательно, иметь утечки памяти.
Если кто-нибудь сможет мне помочь, это будет с благодарностью! Пожалуйста, дайте мне знать, если в моем дизайне есть что-то еще, что поможет вам понять проблему.
Привет.