Неожиданное поведение указателя в C ++

У меня проблема с указателями на C ++, и было бы здорово, если бы кто-нибудь поделился со мной своим опытом!

Результат, который я получаю:

1:
2:
END: C
1:C
2:E
END: E

Результат, который я ожидал, следующий:

1:
2:
END: C
1:C
2:C
END: E

Соответствующий код:

my test.cpp

tree.insert('C');
tree.insert('E');

Функция вставки:

template <typename T> pair<typename btree<T>::iterator, bool> btree<T>::insert(const T& elem) {
  cout <<  "1:" << this->rbegin_->value() << endl;
  btree_node<T> node(elem);
  cout <<  "2:" << this->rbegin_->value() << endl;
  rbegin_ = &node;
  iterator itr;
  pair<typename btree<T>::iterator, bool> p(itr, false);
  cout << "END: " << this->rbegin_->value() << endl;
  return p;
}

Конструктор для btree_node (который в основном пуст):

template <typename T> btree_node<T>::btree_node(const T& elem) : value_(elem), nextCont_(NULL), prevCont_(NULL), nextNode_(NULL), prevNode_(NULL) {}

Класс btree имеет частную переменную:

btree_node<T>* rbegin_;

Это то, что я изменяю. rbegin_ изначально устанавливается на пустой узел в конструкторе btree с помощью:

btree_node<T> end(NULL);
rbegin_ = &end;

Похоже, что мой конструктор узлов, который ничего не делает, изменяет значение rbegin-> value () ....

Любая помощь приветствуется.

6
задан Mick 16 October 2011 в 12:12
поделиться