Mam problem z moimi wskazówkami w C++ i byłoby wspaniale, gdyby ktoś mógł podzielić się ze mną swoją wiedzą!Nieoczekiwane zachowanie wskaźnika w C++
Wyjście Dostaję jest:
1:
2:
END: C
1:C
2:E
END: E
Wyjście Spodziewałem się:
1:
2:
END: C
1:C
2:C
END: E
Kod znaczenie jest następujące:
mój test.cpp
tree.insert('C');
tree.insert('E');
Owad Funkcja rt:
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;
}
Konstruktor btree_node (który jest w zasadzie pusty):
template <typename T> btree_node<T>::btree_node(const T& elem) : value_(elem), nextCont_(NULL), prevCont_(NULL), nextNode_(NULL), prevNode_(NULL) {}
Klasa btree posiada prywatny zmiennej:
btree_node<T>* rbegin_;
czyli co mam modyfikowania . rbegin_ jest początkowo ustawiona na pustym węźle w konstruktorze btree z:
btree_node<T> end(NULL);
rbegin_ = &end;
Wydaje się moim konstruktora węzła, który nic nie zmienia, modyfikuje wartość rbegin-> wartość() ....
Każda pomoc doceniona.
Nadzieję, że przestrzegasz zasady Trzech. –
Cześć Als, przepraszam za moją ignorancję, ale jaka jest "zasada Trzech"? Pozdrowienia. Zdecydowanie postaram się go podążać, jeśli rzeczywiście jest to coś sensownego do naśladowania :) – Mick
Sprawdź to [co-jest-zasada-trzech] (http://stackoverflow.com/questions/4172722/what- to-the-rule-of-three) –