2010-05-22 4 views
0

Dites que j'ai Class1 et Class2 et je veux un constructeur de copie superficielle pour Class1. Class1 a une variable membre, qui est un pointeur pointant vers une instance Class2. Aussi, je dois être en mesure de changer le ptr Class2 pointe vers.passer un pointeur d'une classe

dans le fichier d'en-tête:

class Class1 
{ 
    Class2* ptr; 
    ... 
} 

dans le fichier source:

Class1::Class1() 
{ 
    ptr = new Class2(); 
} 

...... 

Class2* Class1::Exchange(Class2* newClass2) 
{ 
    Class2* temp; 
    ptr = newClass2; 
    return temp; 
} 

...... 

Maintenant dire

Class1 original; 
Class1 shallowCopy(original); 

Class2* newClass2 = new Class2(); 
Class2* oldClass2; 

oldClass2 = orignal.Exchange(newClass2); 
delete oldClass2; 

maintenant je veux est associé original.ptr avec shallowCopy.ptr, quand je implémenter le constructeur de copie superficielle, comment puis-je m'assurer que ces deux pointeurs pointent toujours vers la même Classe2? Je veux dire dans la classe ci-dessus, oldClass2 est supprimé, donc ptr de shallowCopy ne pointe à rien. Si je ne supprime pas oldClass2, les ptrs d'original et shallowCopy pointent sur une instance Class2 différente.

Répondre

3

Vous pouvez vouloir utiliser le comptage de références pour partager les pointeurs, et en particulier la classe shared_ptr de Boost.

Questions connexes