迭代器中的C ++后增量运算符重载(使用-Wall -Werror进行编译)

时间:2011-10-21 07:22:46

标签: c++ iterator operator-overloading b-tree post-increment

我正在为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;
}

我环顾四周,而且我只能找到实施操作员的人员的例子。

每当我之前遇到这样的问题时,我'新'了我正在返回的对象,以便它不再是临时的。但由于这是一个迭代器,如果我这样做,我将无法释放内存,从而导致内存泄漏。

如果有人能够帮助我,那将非常感激!如果我的设计还有其他任何可以帮助您理解问题的信息,请告诉我。

问候。

2 个答案:

答案 0 :(得分:6)

错误很明显 -

error: reference to local variable 'temp' returned

在您的函数中,您返回对temp的引用,这是临时对象。

也许您需要返回副本(因为您不想使用new)。所以,改为

template <typename T> btree_iterator<T>& btree_iterator<T>::operator++(int) {

你可能需要

// note the missing `&`...............vv
template <typename T> btree_iterator<T> btree_iterator<T>::operator++(int) {

答案 1 :(得分:3)

您正在返回对临时变量的引用。将您的声明更改为:

template <typename T> btree_iterator<T> btree_iterator<T>::operator++(int);