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 :

question en venant de java


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre habitu�
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Par d�faut question en venant de java
    Quelque chose me d�range en C++ par rapport au Java. Je vois dans plein de tutoriaux des gens utiliser apparemment de mani�re indiff�rente:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
     UnObjet obj;
     obj.faire;
    et
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
      UnObjet *obj = new UnObjet();
      obj->faire;
    Ne faut-il pas toujours allouer dynamiquement un objet ?

    Merci

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Ne faut-il pas toujours allouer dynamiquement un objet ?
    Non.
    Et d'ailleurs quand tu utilises new, il faut aussi utiliser delete quelque part (ce qui pose des probl�mes d'exception safety par exemple)

  3. #3
    Membre habitu�
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Par d�faut
    comment savoir dans ce cas ?

  4. #4
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Non.

    Comment faire cours ... ?

    Toute donn�e (j'ai pas dit "objet") en C++ peut �tre allou�e sur la pile ou sur le tas (ou �tre globale, ...). Une donn�e sur la pile sera toujours implicitement lib�r�e, et d�truite dans le cas d'un objet (*), en sortie de la port�e de sa d�claration/construction. Une donn�e vivant sur le tas dispose d'une dur�e de vie qui trascende la port�e dans laquelle elle est n�e.

    Ca, ce sont les d�tails techniques. Une application imm�diate est li�e donc � la gestion des dur�es de vie, et � des aspects d'optimisation. En effet, pour faire qu'une donn�e sur la pile vive hors de sa port�e, il faut la copier en dehors de cette port�e. Cela n�cessite deux choses : d'abord qu'elle soit copiable, ensuite que cela ne coute pas trop cher (c'est l'aspect optimisation).


    "Etre copiable" ... Ca, c'est le d�tail s�mantique qui fait toute la diff�rence avec le Java. En Java, les donn�es non natives ont toutes une s�mantique d'entit�. En C++, les donn�es peuvent aussi avoir une s�mantique de valeur (et quantit� de s�mantiques hybrides interm�diaires).

    Une valeur c'est quoi ? C'est une donn�e o� l'�tat d�finit l'"identit�" -- je sais, ce n'est pas le bon mot: car on s'int�resse ici � l'�galit�. i et j sont �gaux s'il ont la m�me valeur. Typiquement c'est le cas de tout les types num�riques et math�matiques (entier, vecteurs, matrices, ...), des cha�nes de caract�res, ...
    S�mantique de valeur suppose que la donn�e est copiable et comparable.
    Les valeurs se r�galent � vivre sur la pile.

    Et une entit� alors ? On parle d'entit� pour les donn�es dont l'�tat peut changer et qui restent pourtant la m�me donn�e. On peut avoir deux r�f�rences vers une m�me entit� (affecter l'entit� au travers d'une r�f�rence l'affecte aussi via l'autre r�f�rence), et avoir deux entit�s qui ont le m�me �tat (des jumeaux).
    L'�galit� ne nous int�resse que rarement dans les entit�s, on va plut�t comparer des sous-�tats qui les caract�risent -- au besoin.
    Elles ne sont pas faites pour �tre copi�es. Au besoin (mais pas toujours), on les dupliquera par clonage -- Java a suivi le C++ l� dessus.
    NB: Les objets tir�s de hi�rarchies polymorphes (h�ritage public) ont � 99% une s�mantique d'entit� ; leur forcer une s�mantique de valeur requiert des cabrioles -- ce n'est pas un probl�me de langage, mais un probl�me OO AMHA.

    Les entit�s vivent tr�s mal sur la pile. Toutes fois, en vu de RAII, quand il n'y a pas de polymorphisme en jeu on peut en d�clarer sur la pile.


    Se sont deux cas extr�mes, limites scolaires -- quoique, plus de 80% (pifom�triques) de mes classes rentrent dans une de ces deux cat�gories.
    A partir de l�, il y a des recettes de cuisines sur ce qui doit etre d�fini et interdit dans chacun des deux cas.

    (*) ce truc est �norme, c'est le d�tail qui fait que g�rer des ressources (m�moire comme pots de peintures) peut devenir tr�s simple en C++ ; cherche RAII dans la FAQ.



    Pour en revenir � ta question, dans un vrai code, cela d�pend. Dans les tutoriaux, a priori,
    - ils se posent rarement la question -> moit'-moit'
    - ils profitent du RAII -> pile
    - ils font dans le polymorphisme -> tas
    - ils d�finissent des objets math�matiques -> pile
    - ils optimisent des transferts de gros objets -> tas (c'est une pessimisation sur les petits)
    - ...
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  5. #5
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Une donn�e vivant sur la pile dispose d'une dur�e de vie qui trascende la port�e dans laquelle elle est n�e.
    Tu voulais pas plut�t dire :
    "Une donn�e vivant sur le tas dispose d'une dur�e de vie qui transcende la port�e dans laquelle est est n�e."
    ?

  6. #6
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Oui en effet. D�finitivement. Merci. J'�dite.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Question d'architecture en java
    Par ploxien dans le forum Langage
    R�ponses: 4
    Dernier message: 30/11/2007, 13h30
  2. 2 questions sur l'API java
    Par �om dans le forum Langage
    R�ponses: 8
    Dernier message: 28/07/2006, 09h09
  3. Questions sur les compilateurs java
    Par irenee dans le forum API standards et tierces
    R�ponses: 2
    Dernier message: 30/05/2006, 10h42
  4. [D�butant] Question de cours de JAVA
    Par pinggu dans le forum D�buter avec Java
    R�ponses: 17
    Dernier message: 17/05/2006, 15h09
  5. [D�butant] Questions de base sur java
    Par JajaY dans le forum Langage
    R�ponses: 2
    Dernier message: 04/04/2006, 18h51

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