Comment échanger références et pointeurs ?
Bonjour à tous,
Question bête aujourd'hui, je suis confronté à des problèmes de gestion de mémoire assez opaques pour moi que j'essaie de résoudre comme je peux... Du coup je reviens vers ce forum qui m'a déjà bien aidé pour mon algo du moment.
Donc, pour passer d'une référence à un pointeur et vice-versa, je voudrais juste confirmation (ou non) qu'on peut sans problèmes subtils écrire ça svp :
Code:
1 2 3 4 5
|
Objet* p = new Objet();
Objet& r = *p; // pointeur => référence
Objet* p2 = &r; // référence => pointeur
delete p2; |
Merci d'avance :)
PS : en fait j'ai notamment cette fonction qui semble poser souci, en effet j'ai bien l'impression que j'ai des nœuds qui disparaissent mystérieusement dans mon programme à cause d'elle :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
Noeud& Noeud::insererNouveauNoeud(unsigned int posFilsAScinder, unsigned int nbCaracteresARetrancher) // scinde une arête du noeud courant en deux, en y insérant un nouveau noeud après le nombre de caractères indiqué (adapté pour ukkonen)
{
Noeud& filsAScinder = *fils[posFilsAScinder]; // référence vers le fils dont on va scinder l'arête
unsigned int indexDebutFils = filsAScinder.getIndexDebut(); // on récupère son index de début
filsAScinder.setIndexDebut(indexDebutFils + nbCaracteresARetrancher); // on met à jour le début de l'ancien fils en conséquence
Noeud* pnouveau = new Noeud(indexDebutFils, indexDebutFils + nbCaracteresARetrancher - 1, 0); // on crée un nouveau noeud avec cet index de début et l'index de fin au bon endroit
pnouveau->nouveauFils(&filsAScinder);
setFils(pnouveau, posFilsAScinder);
return *fils[posFilsAScinder];
}
void Noeud::setFils(Noeud* n, unsigned int index)
{
fils[index] = n; // c'est un vector de pointeurs vers des Noeud
fils[index]->pere = this;
}
unsigned int Noeud::nouveauFils(Noeud* n)
{
n->pere = this;
fils.push_back(n);
return fils.size() - 1;
} |