IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

ofstream dans le constructeur par recopie


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut ofstream dans le constructeur par recopie
    Salut,

    J´aimerais initialiser une variable de type ofstream dans le constructeur par recopie d´un objet.

    Comment dois-je faire pour que ma variable ofstream designe un autre flux?

    J´espere aue je suis assez clair

    Merci,

    Mop!o

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Pas trop, mais en dehors de ça le fonctionnement est exactement le même que pour un constructeur normal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class truc {
    ofstream machin;
    public:
    truc(const truc&): machin(les arguments que tu veux) {}
    };
    Maintenant, je sens que ce que tu voulais vraiment c'est faire en sorte que le stream soit en quelque sorte "copié". Et bien, c'est impossible et pour de très bonnes raisons.
    Tous les streams sont incopiables, donc toutes les classes en contenant le sont aussi. Dans le cas des stringstreams par exemple il est possible de contourner ce fonctionnement (leur buffer interne est un string, il suffit donc d'initialiser un nouveau stream avec pour buffer une copie du premier buffer). Mais certainement pas pour des streams fichier, à plus forte raison si ils sont en écriture! La c'est tout ton OS qui te dira d'aller te faire voir.
    Apparament ton idée est de créer une sorte de déviation, un stream qui redirigerait vers le premier. C'est possible mais c'est un bien mauvais mode de fonctionnement, qu'arrivera-t-il quand ton premier objet sera détruit?
    Une solution viable serait d'utiliser un shared_ptr, la aucun risque de pointeur fantôme, mais je considérerais plutot ça comme une mauvaise technique de programmation, quel que soit le langage. En effet, il faut considérer un shared_ptr comme un garbage collector à comptage de réfèrence, c'est à dire que tu n'as aucune idée du moment où ton objet sera détruit. Ce n'est pas un problème pour les objets qui ne représente rien d'autre que des données (exemple: des images) mais ça l'est dans le cas d'un stream sur fichier, car c'est l'exemple type d'objet dont on voudrait connaitre le moment exact de destruction (pour que ton programme ou un autre puisse aller lire le fichier).
    Alors mon avis: prends quelques minutes pour savoir si ton stream a vraiment quelque chose à faire dans ton objet (ce serait pas mieux de stocker le nom du fichier pour pouvoir instancier un stream en variable locale uniquement quand tu en as besoin?) et si c'est le cas, utilise un shared_ptr.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour les explications. Je l´ignorais.

    Alors mon avis: prends quelques minutes pour savoir si ton stream a vraiment quelque chose à faire dans ton objet (ce serait pas mieux de stocker le nom du fichier pour pouvoir instancier un stream en variable locale uniquement quand tu en as besoin?)
    → C´est ce que j´ai fait, le stream dans la classe n´était pas vraiment nécessaire. Il passe en variable locale.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 25/08/2006, 16h00
  2. Constructeur par recopie
    Par Bebert71 dans le forum C++
    Réponses: 13
    Dernier message: 18/05/2006, 15h08
  3. [Débutant] Constructeur par recopie pour TComponent
    Par Runlevel dans le forum C++Builder
    Réponses: 9
    Dernier message: 06/05/2006, 16h58
  4. Constructeur par recopie
    Par KernelControl dans le forum C++
    Réponses: 2
    Dernier message: 29/12/2005, 12h24
  5. Constructeur par recopie
    Par sdebrois dans le forum Composants VCL
    Réponses: 13
    Dernier message: 21/10/2004, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo