Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sauvegarder un pointeur.

Sujet résolu
    15 janvier 2020 à 10:19:18

    Bonjour,

    Une petite question : J’ai un objet objetB qui contient comme principal attribut un vector<T> x. J’ai un objetA qui contient les attributs a, b et c, c étant un pointeur vers un élément de x (le vector appartenant à l’Objet B).

    Maintenant si je sauvegarde mes deux objets dans des fichiers textes. Je vais  créer un fichier pour objetB, contenant sur chaque ligne la valeur des élément de x (par exemple si T=double, il y aura un fichier objetB.txt contenant un nombre par ligne). Pour objetA, je vais créer un autre fichier texte, contenant par exemple trois lignes avec les valeurs de a, b, et c.

    Maintenant si je veux recharger ces données, j’ai un problème : lorsque je vais charger objetB, il va être chargé dans une adresse mémoire libre à ce moment là, que ne sera pas la même qu’au moment de l’enregistrement.

    Du coup, comment stocker c ? Si j’inscris l’adresse mémoire celle-ci changera au prochain chargement et j’aurai un pointeur sur un truc aléatoire. Si j’inscris directement l’objet, en admettant que ce soit faisable, je récupérerai seulement un copie, ce qui ne m’intéresse pas forcément.

    Connaissez vous une martingale pour ce genre de situation ?

    Merci d’avance.

    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2020 à 10:30:26

      Salut,

      En effet, tu ne peux pas sauvegarder un pointeur, car tu ne peux pas imposer une adresse.

      Souvent ce qui est fait, c'est que chaque objet à un ID (un entier), et on sauvegarde les entiers.

      Et à la relecture, pour réassigner les pointeurs, tu maintiens au chargement une map de l'ID vers l'adresse de l'objet que tu crées et tu fais pointer vers l'adresse correspondant à l'ID voulu.

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        15 janvier 2020 à 10:40:14

        Merci pour la piste. Je vais regarder ça.
        • Partager sur Facebook
        • Partager sur Twitter
          15 janvier 2020 à 10:51:36

          Megalo a écrit:

          Merci pour la piste. Je vais regarder ça.


          Pas trop le choix de toutes façons.

          La problématique générale, c'est la sérialisation/désérialisation de données.

          -
          Edité par michelbillaud 15 janvier 2020 à 11:07:53

          • Partager sur Facebook
          • Partager sur Twitter
            15 janvier 2020 à 11:07:05

            Salut,

            Il est clair que tu ne peux pas sauvegarder la valeur du pointeur

            Je vois 3 solutions :

            La moins probable, si le contenu du vecteur est une sémantique de valeur (l'intérêt de le pointer ?) alors tu peux sauvegarder la valeur pointée, et de lier à une valeur égale au chargement

            Maintenant si le contenu du vecteur a une sémantique d'entité, ajoute un système d'UID et mémorise l'id de l'objet pointé.

            Et la troisième solution rejoint un peu l'idée de l'ID, c'est de te servir de l'index du vecteur

            EDIT : grillé, c'était resté ouvert dans un coin

            -
            Edité par romantik 15 janvier 2020 à 11:07:52

            • Partager sur Facebook
            • Partager sur Twitter
            Dream on, Dream on, Dream until your dream comes true

            Sauvegarder un pointeur.

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown