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 :

Instance courante toujours présente ou détruite ?


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut Instance courante toujours présente ou détruite ?
    Bonjour,
    Je vous expose ma question, assez primaire il me semble, mais j'espère pouvoir l'expliquer concrètement :

    J'ai deux classes, les deux sont des fenêtres, la première classe est uniquement destinées à accueillir une ou plusieurs instance(s) de la seconde classe. Je m'explique :
    MaClasse1 contient le titre de ma page + un champ de recherche + un cadre. En effectuant une recherche, j'affiche dans le cadre de MaClasse1 autant d'instance de MaClasse 2 qu'il y a de résultats.

    (par exemple, je recherche les fiches identités des personnes dont le jour de leur date de naissance est 23)

    Voici une partie du code qui permet de le faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void MaClasse1::recherche(QList<QList<QString> > list)
    {
         cadre->clear();
     
         for(int i=0; i<list.count(); i++)
         {
               maClasse2 = new MaClasse2();  // je crée autant d'instance que j'ai de résultat (les résultats sont le nombre de QList<QList<QString> >)
               QString titreCadre;
               titreTabWidget = "Lot N°";
               titreTabWidget += list.value(i).value(2);
     
               for(int j=0; j<list.value(i).count(); j++)
               {
                   maClasse2->setValues(list.value(i));
               }
     
               cadre->addTab(maClasse2 , titreCadre);
         }
         titreCadre->setCurrentIndex(0);
    }

    Ma question est la suivante, est-ce qu'en créant une nouvelle instance de MaClass2 comme je l'ai fais là, je supprime l'ancienne ?
    J'aurais tendance à dire que non, que les valeurs de chaque maClass2 sont encore en mémoire, mais l'incertitude règne...

    Merci d'avance pour vos éclaircissements, et à bientôt.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Ben non, tu ne supprimes rien...
    Par contre, si tu as une liste, j'ai du mal à voir pourquoi tu gardes dans ta classe un pointeur vers la dernière instance créée de MaClasse2...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Par contre, si tu as une liste, j'ai du mal à voir pourquoi tu gardes dans ta classe un pointeur vers la dernière instance créée de MaClasse2...
    J'ai pas très bien compris en fait ce que tu demandes, mais pour expliquer plus en détail, la fonction "rechercher" me permet de checker dans ma base de données SQL, en fonction du nombre de lignes retournées, je crée un instance de MaClasse2 qui contient les valeurs de chaque ligne.

    Mon problème est que je n'arrive pas à checker sur ces instances en particulier, quand je veux sauvegarder les modifications sur une fiche par exemple.

    Je n'arrive à retourner que la dernière instance créée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QList<QString> MaClasse1::listAllQWidget() const
    {     
         return maClasse2->listAllQWidget();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    QList<QString> MaClasse2::listAllQWidget() const 
    {
         QList<QString> list;
     
              list.append(code1->text());
              list.append(code2->text());
              list.append(dateDeNaissance->text());
              // etc...
     
         return list;
    }

    Je sais pas si je peux gérer ça avec la bibliothèque Qt que j'utilise (plus particulièrement avec la class qui contient mes instances de MaClasse2)
    Ou si c'est une erreur purement C++...
    En fait, je suis un peu perdu là

    Je me tourne vers Qt car je pense qu'il faut que je check sur la fenêtre qui est affiché en ce moment...

    Mais par exemple : imaginons que je ne check rien de ce qui est affiché, et que je préfère sauvegarder toutes les instances de maclasse2 crées en même temps, Comment je peux faire pour retrouver mes instances au complet ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Pourquoi ne pas mémoriser tout simplement dans MaClasse1 une liste de MaClasse2 ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    tu veux dire quelque chose du genre :

    ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    oui, un truc du genre.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    En effet, j'y avais pas pensé...

    Je vais voir ce que je peux faire de ce coté, merci !

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Dans la fonction que nous montre, tu fais un passage par copie de l'argument liste, pense à le faire par référence plutôt!

    Poukill.

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Salut Poukill, et merci pour la remarque (j'espère l'avoir bien comprise...)

  10. #10
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par poukill Voir le message
    Dans la fonction que nous montre, tu fais un passage par copie de l'argument liste, pense à le faire par référence plutôt!

    Poukill.
    Mais ça sert à rien ! Avec Qt, les conteneurs ont un partage implicite, on ne fait pas de copie lourde et inutile.

    C'est ça qui est bon, on peut programmer en raisonnant par valeurs, en style fonctionnel, sans perdre de performances.

  11. #11
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    à rien...si à prendre une bonne habitude quand même

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Je pense qu'il faut surtout savoir ce qu'on fait de la liste:
    • Aucune modification -> référence constante
    • Modification partagée -> référence non-const
    • Modification isolée -> copie (il me semble que le "partage" de QT est en Copy-On-Write, pas en shared_ptr)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    J'ai résolu mon problème.

    Donc merci tout le monde, merci Médinoc (je sais pas trop si ce que j'ai fais au final est ce à quoi tu pensais en me répondant, limite j'ai même l'impresion que c'est pas du tout ça)

    voici ce que j'ai fais ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    void MaClasse1::recherche(QList<QList<QString> > list)
    {
         tabWidget->clear(); //nétoyage des onglets déjà affichés    
         listFiche.clear(); // nétoyage de ma liste QList<Maclasse2 *> listFiche
     
         QList<QString> listTitre; //liste des titres des onglets
     
         for(int i=0; i<list.count(); i++)
         {      
               maClasse2= new MaClasse2; 
               QString titreTabWidget;    
               titreTabWidget = "Lot N°";
               titreTabWidget += list.value(i).value(2);
               listTitre.append(titreTabWidget);
     
               for(int j=0; j<list.value(i).count(); j++)
               {
                   maClasse2->setValues(list.value(i));
               }
     
               listFiche.append(maClasse2);
         }
     
         for(int k=0; k<listFiche.count(); k++)
         {
               QString s = listTitre.value(k);
               tabWidget->addTab(listFiche.value(k), s); //affichage des onglets
         }
     
         tabWidget->setCurrentIndex(0);
    }
    Avec ceci je peux récupérer facilement l'instance courante de l'onglet affiché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listFiche.value(tabWidget->currentIndex())->enregistrerDonnéesAffichées();
    J'imagine qu'il y avait surement plus simple... Mais ça fonctionne.
    Encore merci et bonne fin de soirée.

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

Discussions similaires

  1. Supprimer une section vide qui est toujours présente.
    Par reverba dans le forum SAP Crystal Reports
    Réponses: 21
    Dernier message: 25/01/2013, 14h07
  2. explication du mot instance courante
    Par heeedi dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 12/08/2009, 15h44
  3. Désinstallation de php : php est toujours présent
    Par vbcasimir dans le forum RedHat / CentOS / Fedora
    Réponses: 3
    Dernier message: 11/08/2008, 16h10
  4. Réference à l'instance courante (this ?)
    Par horzy dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/05/2007, 16h13
  5. Réponses: 4
    Dernier message: 04/10/2005, 14h37

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