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++/CLI Discussion :

[C++>C#] Liste chainée ou comment utiliser des pointeurs ?


Sujet :

C++/CLI

  1. #1
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    57
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 57
    Par d�faut [C++>C#] Liste chainée ou comment utiliser des pointeurs ?
    Bonjour, je suis d�sol� de vous poser uen question pour laquelle vous allez me jeter des pierres mais j'ai pas trop le choix!!!
    En fait voil�. J'ai ecrit un code de liste chain�e en C++ qui est cens� lire un fichier XML et le mettre en m�moire dans des Nodes (une node est une classe).

    La classe Node comporte, entre autre, des pointeurs:
    - CNode* pFirstChild; //Pointeur sur le premier fils du noeud courant
    - CNode* pFirstBrother; //Pointeur sur le premier frere du noeud courant

    ... etc...

    Du coup, au passage en C#, ben il gueule (surement avec raison) et me demande de passer en "unsafe"...
    Mais meme comme ca il veut pas parce que les pointeurs en C# ne sont possible qu'avec certains types de base (int, char, ...).

    Du coup, ok, tres bien, je me soumet... Mais comment que je fait moi?!!
    Quelqu'un a une tite id�e?
    Et oui je sais qu'il existe des classes toutes pretes pour parser un document XML et d'ailleurs, je l'utilise sans soucis mais bon, pour une raison complexe et ind�pendente de mon bien etre mental, je ne peux pas l'utiliser dans ce cas precis...

    Au secours!!!!!!!!!

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2003
    Messages
    191
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2003
    Messages : 191
    Par d�faut
    Au lieu d'utiliser les pointeurs, il te suffit d'utiliser les r�f�rences en C#... genre tu peux cr�er une classe node du syle:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    public class Noeud {
     
         private object Data;
         private Noeud NSuivant;
    }
    dans le cas d'une liste simplement cha�n�e dans ce cas ci...

  3. #3
    Membre exp�riment�

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    95
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 95
    Par d�faut Re: [C++>C#] Liste chain�e ou comment utiliser des pointe
    Citation Envoy� par LAPLACE
    Quelqu'un a une tite id�e?
    Salut,

    Franchement le premier truc a faire c'est de te d�barrasser des pointeurs.
    ils ne repr�sentent plus vraiment d'int�rets en C# ou VB.NET.

    Tu peux tr�s simplement convertir ton code en remplacant tes pointeurs de classe :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            class CNode
            {
                public CNode pFirstChild;
                public int Valeur;
     
                public void AddChild(CNode N)
                {
                    pFirstChild = N;
                }
            }
    Exemple d'utilisation :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
                CNode N1=new CNode(); 
                N1.Valeur=12;
                CNode N2 =new CNode();
                N2.Valeur = 22; 
                N1.AddChild(N2);
    A+

  4. #4
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    57
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 57
    Par d�faut
    Merci pour ta reponse!
    donc, quand je fait dans le constructeur:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    private Noeud pParent;
     
    Noeud(Noeud _Parent)
    {
        pParent = _Parent;
    }
    Cela fonctionne? si je modifie directement les data dans pParent, ca change le noeud directement?
    De plus, avant, je faisait un "delete pParent" pour supprimer un noeud (et faire appel a la methode destruction) mais du coup, l�, je peux plus...
    Comment on peut detruire une instance de classe?

  5. #5
    Expert confirm�
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    D�tails du profil
    Informations personnelles :
    �ge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par d�faut
    Si tu es sous 2.0, n'oublies pas egalement que tu disposes des generics pour faire ta propre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    public class NodeCollection : List<Node>
    {
       //...etc
    Sinon
    Comment on peut detruire une instance de classe?
    en utilisant peut �tre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    using (MySpaceName.MyClass truc = new MySpaceName.MyClass())
    {
      //...
    }
    Using Objects That Encapsulate Resources

  6. #6
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    57
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 57
    Par d�faut
    Merci pour vos reponses!!! Trop gentil!
    Pour ce qui est de mon delete, j'ai un peu de mal a comprendre comment faire le "using..." permet de supprimer de la m�moire un Noeud que j'aurais cr��. Mais je vais de ce pas regarder ton lien!

    Merci encore! :p

  7. #7
    Membre �m�rite
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    835
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 835
    Par d�faut
    En .Net tu ne liberes plus la m�moire allou�e pour tes objets, le garbage collector s'en charge pour toi. La syntaxe avec le using qu'on t'a donn� plus haut permet simplement d'appeler automatiquement la fonction Dispose de ton objet d�s la sortie du bloc using, a condition que ton objet impl�mente l'interface IDisposable.
    Ce "truc" du dispose n'est utile que si ton objet gere des ressources non manag�es (handler de fichier par exemple) que tu souhaites lib�r�er de mani�re d�terministe pour �viter un leak de cette ressource (note bien que normalement ton objet doit posseder un finalizer qui sera appel� par le garbage collector, ce finalizer doit lui meme appeler la fonction Dispose, mais tu ne sais pas quand il sera appel�).
    Bref regarde du cot� de la documentation sur la gestion de la m�moire par le framework, le garbage collector, IDisposable, Finalize ...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 14
    Dernier message: 22/04/2006, 21h59
  2. Biblioth�que de listes chain�es
    Par gege2061 dans le forum C
    R�ponses: 29
    Dernier message: 17/12/2004, 20h15
  3. copie de liste chain�e
    Par tomsoyer dans le forum C++
    R�ponses: 15
    Dernier message: 31/08/2004, 18h20
  4. Trie liste chaine
    Par Congru dans le forum C
    R�ponses: 2
    Dernier message: 30/03/2004, 19h05
  5. tri de liste chain�e
    Par RezzA dans le forum C
    R�ponses: 7
    Dernier message: 26/01/2003, 20h25

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