Vecteur de pointeurs d objet

Vecteur de pointeurs d objet - C++ - Programmation

Marsh Posté le 02-10-2007 à 21:36:10    

Bonsoir.
 
voila j'aimerai disposer d'un type Repertoire et d'un type Fichier. Un répertoire pouvant etre composé de fichiers et de répertoires, j'ai donc crée une super classe SuperRep.  
 
dans mon répertoire, je déclare un attribut de type vector
 
 

Code :
  1. class Repertoire {
  2. private : vector<SuperRep*> _liste
  3. ...
  4. }


 
J'ai donc dans mon main :  
 

Code :
  1. Fichier f("fich",100);
  2. Repertoire rep("rep1" );
  3. rep.add(&f);


 
J'essaye ensuite de supprimer le fichier f :  

Code :
  1. f.~Fichier();


Seulement le problème est que même après cette suppression de f, le fichier appareait toujorus dans le répertoire.
je ne sais pas comment faire ...
 
Si quelqu'un a une solution ....

Reply

Marsh Posté le 02-10-2007 à 21:36:10   

Reply

Marsh Posté le 02-10-2007 à 21:59:45    

Ce serait possible d'avoir ta classe Fichier ?

 

EDIT: et ta methode Repoertoire::add() ...


Message édité par Olivier51 le 02-10-2007 à 22:07:50
Reply

Marsh Posté le 02-10-2007 à 22:20:17    

Salut,
 
Repertoire et Fichier devrait tout 2 hériter d'un type commun car il y a tout de même certains points communs (tant en membre qu'en méthodes).
 
Plus directement lié à ton problème:
> On n'appelle pour ainsi dire jamais un destructeur explicitement
> La suppression d'un fichier *ne doit pas* être placé dans le destructeur; ça me ferait assez mal qu'en éteignant windows, il m'efface tout les fichiers et répertoires auquels j'ai pu accéder à quelque degré que ce soit ;)
> Lorsque tu appelles f.~Fichier();, tu ne l'enlèves pas du conteneur du répertoire, tu ne fais que le corrompre (puisque tu as dès lors un pointeur vers une instance qui n'existe plus)

Reply

Marsh Posté le 03-10-2007 à 00:59:10    

IrmatDen a écrit :

Salut,
 
Repertoire et Fichier devrait tout 2 hériter d'un type commun car il y a tout de même certains points communs (tant en membre qu'en méthodes).
 
Plus directement lié à ton problème:
> On n'appelle pour ainsi dire jamais un destructeur explicitement
> La suppression d'un fichier *ne doit pas* être placé dans le destructeur; ça me ferait assez mal qu'en éteignant windows, il m'efface tout les fichiers et répertoires auquels j'ai pu accéder à quelque degré que ce soit ;)
> Lorsque tu appelles f.~Fichier();, tu ne l'enlèves pas du conteneur du répertoire, tu ne fais que le corrompre (puisque tu as dès lors un pointeur vers une instance qui n'existe plus)


 
tout à fait d'accord.
J'ajouterais que voyant f.~Fichier(); et rep.add(&f); j'imagine que f n'est pas un pointeur, il est donc inutile d'appeler le destructeur (même mal).
 
Personnellement (les remarques sont les bienvenues) j'aurais appelé Repertoire::add() dans  le constructeur de Fichier et Repertoire::supp() dans son destructeur.
Comme ça, un fichier est forcément dans un répertoire (à condition sous windows de considérer la racine comme un répertoire) et le repertoire n'est pas corrompu à la destruction du Fichier (suppression ou fin de l'application).


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 03-10-2007 à 08:48:02    

Des fois on peut se dire que le nommage c'est ~destructeur() parce que c'est aussi difficile à écrire, mais non. Même si on avait choisi un truc genre insulte dans TinTin, y aurait toujours eu un zouave pour l'appeler explicitement :/

Reply

Marsh Posté le 03-10-2007 à 09:16:09    

punaise ... mais on apprend quoi en école de nos jours ! vector a une méthode erase quand même :o et je ne rviendrais pas sur le passage par pointeur pour add() et l'utilsiation explicite du destructeur.  
 
Joel, qui va chercher sa boite de Tranxen v_v

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed