Tengo un problema con mis punteros en C++, y sería genial si alguien pudiera compartir su experiencia conmigo.Comportamiento de puntero inesperado en C++
La salida que estoy recibiendo es:
1:
2:
END: C
1:C
2:E
END: E
La salida me esperaba es:
1:
2:
END: C
1:C
2:C
END: E
El código de relevancia es la siguiente:
mi test.cpp
tree.insert('C');
tree.insert('E');
El inse función de la temperatura ambiente:
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;
}
El constructor de btree_node (que es básicamente vacío):
template <typename T> btree_node<T>::btree_node(const T& elem) : value_(elem), nextCont_(NULL), prevCont_(NULL), nextNode_(NULL), prevNode_(NULL) {}
La clase árbolB tiene una variable privada:
btree_node<T>* rbegin_;
¿Qué es lo que estoy modificando . rbegin_ se establece inicialmente en un nodo vacío en el constructor árbolB con:
btree_node<T> end(NULL);
rbegin_ = &end;
Parece que mi constructor de nodo, que no hace nada, está modificando el valor de rbegin-> valor() ....
Cualquier ayuda apreciada.
Espero que estés siguiendo la regla de Tres. –
Hola Als, disculpa por mi ignorancia, pero ¿cuál es "la regla de los Tres"? Saludos. Definitivamente intentaré seguirlo, si de hecho es algo razonable de seguir :) – Mick
mira esto [what-is-the-rule-of-three] (http://stackoverflow.com/questions/4172722/what- is-the-rule-of-three) –