Ho un problema con i miei indicatori in C++ e sarebbe bello se qualcuno fosse in grado di condividere la loro esperienza con me!Comportamento puntatore imprevisto in C++
L'uscita sto ottenendo è:
1:
2:
END: C
1:C
2:E
END: E
L'uscita mi aspettavo è:
1:
2:
END: C
1:C
2:C
END: E
Il codice di rilevanza è questo:
mia test.cpp
tree.insert('C');
tree.insert('E');
L'interno Funzione 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;
}
Il costruttore per btree_node (che è praticamente vuoto):
template <typename T> btree_node<T>::btree_node(const T& elem) : value_(elem), nextCont_(NULL), prevCont_(NULL), nextNode_(NULL), prevNode_(NULL) {}
La classe btree ha una variabile privata:
btree_node<T>* rbegin_;
Che è quello che sto modificando . rbegin_ è inizialmente impostato su un nodo vuoto nel costruttore btree con:
btree_node<T> end(NULL);
rbegin_ = &end;
Sembra che la mia costruttore di nodi, che non fa nulla, sta modificando il valore di rbegin-> valore() ....
Qualsiasi aiuto apprezzato.
Spero tu stia seguendo la regola del Tre. –
Ciao Als, scusa per la mia ignoranza, ma qual è la "regola del Tre"? Saluti. Cercherò sicuramente di seguirlo, se è davvero qualcosa di ragionevole da seguire :) – Mick
verificarlo [cosa-è-la-regola-di-tre] (http://stackoverflow.com/questions/4172722/what- is-the-rule-of-three) –