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

Langage C++ Discussion :

à propos du placement new


Sujet :

Langage C++

  1. #1
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut à propos du placement new
    Bonjour tout le monde,

    prenons par exemple la structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct A
    {
       A();
       A( int );
    };
    j'ai du mal à comprendre la différence entre:
    et
    Savez-vous quelque chose à ce sujet?

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Dans le premier cas tu construit une fois un A avec le constructeur prenant un int,
    dans le second tu constuits un A avec le constructeur par defaut puis une deuxieme fois avec le constructeur prenant un int sans detruire le premier.

    Le new avec placement n'est pas fait pour ca, il est fait pour pouvoir utiliser initialiser un objet a un emplacement fixe qui devrait etre de la memoire brute obtenue par un autre moyen. Exemple d'utilisation typique, std::vector obtient un bloc de memoire contigu de taille reserve() objets mais n'a que size() objets construits. Tu fais un push_back, tu construits un nouvel objet avec une placement new a un emplacement reserve mais pas encore utilise. boost variant et boost optional sont d'autres exemples ou c'est vraisemblablement utilise.

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Merci

    Juste pour s'amuser, il semble que l'on puisse faire à peu près la même chose comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <setjmp.h>
     
    jmp_buf env;
     
    struct A {
           int x;
           A(){
               int val=setjmp(env);
               std::cout << "Hola " << val << "\n";
              }
    };
     
    main()
    {
           A a;
           longjmp(env,1);
    }
    Ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <iostream>
    #include <ucontext.h>
     
    ucontext_t *ct,*ctorig,*dummy = NULL;
     
    struct A {
           int x;
           A(){
               getcontext(ct);
               std::cout << "Hola " << "\n";
               if (ctorig) swapcontext(dummy,ctorig);
              }
           ~A(){ std::cout << "Chau\n"; }
     
    };
     
    int main() {
           ct = new ucontext_t;
           A a;
           ctorig = new ucontext_t;
           dummy = new ucontext_t;
           swapcontext(ctorig,ct);
           swapcontext(ctorig,ct);
           };
    'sont fous ces espagnols

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

Discussions similaires

  1. operator=(&&) à coup de placement new/delete ?
    Par germinolegrand dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2015, 13h26
  2. Conflit entre surcharge de new et placement new?
    Par Médinoc dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2012, 10h30
  3. erreur placement new G++ 4.3.3
    Par ozzyyzzo dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 16/01/2010, 22h24
  4. placement new sur tableau
    Par camboui dans le forum C++
    Réponses: 13
    Dernier message: 18/03/2009, 14h44
  5. Placement new et alignement memoire
    Par Genjin dans le forum C++
    Réponses: 5
    Dernier message: 11/06/2007, 14h26

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