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 :

Création d'objets dans une boucle


Sujet :

C++

  1. #21
    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
    Citation Envoyé par Astraya Voir le message
    Il coute un déréférencement de plus, alors ce n'est rien dans 99% des cas, mais cela peut couter cher sur un tableau de unique_ptr. C'est toujours bon de savoir que il y a tout de même un déréférencement en plus avec std::unique_ptr.
    Un mec a fait un article sur ce cout ici
    Il ne compare pas la même chose... D'un côté, il passe un pointeur nu par valeur à une fonction, puis appelle une fonction sur l'objet pointé. Dans l'autre cas, il passe à la fonction un unique_ptr par référence, puis appelle la même fonction. Il y a donc deux déréférencements, un pour la référence, un pour le unique_ptr. S'il avait passé son pointeur nu par référence, il aurait eu même code (sauf si le compilateur est capable de mieux optimiser le code plus simple, ce qui reste à mon avis la seule source de différences potentielle de perf entre T* et unique_ptr<T>).

    Sachant que passer un unique_ptr par référence à une fonction est assez rare, la manière correcte restant, même en présence d'unique_ptr, de passer un T* quand la fonction utilise l'objet pointé sans interférer avec la durée de vie de ce dernier (cas très courant).

    Pointeur nu => unique_ptr
    void f(T*p) => void f(T* p) (ou si un jour ça existe void f(observer_ptr<T> p))
    void f(T *&p) => void f(unique_ptr<T> &p)
    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.

  2. #22
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    La "manière correcte" dans la mesure où la nullité est valide. Si les pré-condition de la fonction disent "avec un objet valide", la référence est la manière correcte.
    Au final, tout dépend de la sémantique de la fonction : qu'elle soit puits (unique_ptr), observatrice (et que dans ce cas que la donnée soit optionnelle (optionnal, observer_ptr, raw ptr) ou pas (référence) ), ...
    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. [MySQL] Création de variables dans une boucle et récupération de données avec une requête
    Par lavande4 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/09/2008, 11h10
  2. Création d'objets dans une boucle for
    Par urban_p dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/06/2008, 10h34
  3. Création d'instance dans une boucle ?
    Par stabe dans le forum C#
    Réponses: 15
    Dernier message: 03/01/2008, 16h48
  4. probleme de création de variable dans une boucle
    Par misterweb dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2007, 19h21
  5. [FLASH MX] Créer un objet dans une boucle
    Par alexfrere dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 30/04/2006, 01h35

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