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 :

"move semantic" testée avec gcc tdm 4.8.1


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut "move semantic" testée avec gcc tdm 4.8.1
    Bonjour,
    Tout d'abord comme je ne sais pas comment c'est traduit dans les documentations en français les termes "move semantic, move constructor..."
    donc je les laisse en anglais.
    J'ai voulu savoir quand est ce que le "move constructor" est appelé?
    J'ai utilisé l'exemple trouvé sur le site msdn
    http://msdn.microsoft.com/fr-fr/library/dd293665.aspx
    et le testé avec le compilateur tdm gcc 4.8.1, j'ai mis le résultat en pièce jointe
    Il y a 2 points que je n'ai pas compris, si quelqu'un peut m'expliquer:
    Pourquoi les constructeurs de copie sont appelees? Si c'est nécessaire d'appeler les construteurs de copie pourquoi l'appel de ce constructeur n'y est pas pour "length = 50"
    Merci
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Edit : J'ai barré ce qui est faux dans cette réponse, voir réponse de Flob90 plus bas.

    Il serait intéressant de voir quand ils sont appelés, mais j'ai l'impression que c'est pendant la réallocation de la mémoire pour le vector et la recopie vers la nouvelle zone. Ce qui indiquerait que c'est un problème non pas du compilateur, mais de la bibliothèque standard utilisée qui ne ferait pas de move lors de cette réallocation. Il faudrait faire du debug pour confirmer (mettre un breakpoint dans le constructeur de copie, et afficher la call stack).
    Ce expliquerait que pour 50 il n'y ait pas besoin, puisqu'il est mis en dernier.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut JolyLoic,
    J'avais regarde la call stack mais j'avoue que j'ai du mal a voir, d'ou ce post
    "Ce expliquerait que pour 50 il n'y ait pas besoin, puisqu'il est mis en dernier. "
    S'il n'y a pas de "move constructor" le compilateur va appeler le constructeur de copie, et c'est ce qu'il a fait pour le dernier mais par contre il a appele le "move constructor" et "copy constructor" pour les 2 premiers,j'ai du mal a comprendre

  4. #4
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Mets ton move-ctor en noexcept et ça devrait donner ce que tu veux.

    Si tu as un copy-ctor (avec const&) et un move-ctor non noexcept, il est légitime que le vecteur privilégie l'utilisation du copy-ctor pour les déplacements internes pour conserver une résistance forte aux exceptions.

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Ah, oui, c'est ça ! Et comme visual C++ ne gère pas encore correctement les noexcept, c'est "normal" qu'il n'ai pas ce comportement.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

Discussions similaires

  1. Requete avec quote et double quote
    Par swissmade dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/08/2007, 15h01

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