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 :

constructeur et new


Sujet :

C++

Vue hybride

Gébix constructeur et new 04/03/2011, 10h30
jblecanard Salut J'ai déjà rencontré... 04/03/2011, 11h42
cob59 Je dirais : // v... 04/03/2011, 12h49
jblecanard C'est un vector et plus un... 04/03/2011, 13h35
3DArchi 8O :koi: J'imagine qu'il... 04/03/2011, 18h47
AF_2.8 Pour créer un tableau... 04/03/2011, 20h33
jblecanard Oui pardon, au temps pour moi... 06/03/2011, 22h07
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 168
    Par défaut constructeur et new
    Bonjour,

    Je n'arrive pas à trouver la synthaxe correcte qui me permetterait d'utiliser new avec un constructeur spécifique, genre ayant une class A avec un constructeur A(int a) :

    Quelqu'un aurait-il une idée ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    J'ai déjà rencontré ce problème. Il te faut :
    - Soit un constructeur par défaut sans argument
    - Soit appeler chaque constructeur "manuellement" mais ce n'est pas toujours possible.

    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
    struct A
    {
    	A() : a(0) {}
    	A(int a_) : a(a_) {}
    	int a;
    };
     
    int main(int argc, char * argv[])
    {
    	A * i = new A[10];
    	A j[3] = {A(2),A(3),A(5)};
     
    	delete[] i;
    	return 0;
    }
    Mais il n'y a pas de syntaxe pour l'opération précise que tu cherches, malheureusement.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Je dirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // v contient 10 instances de A construites avec A::A(int)
    std::vector<A> v(10, A(5));
    Non ?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    C'est un vector et plus un tableau C++, mais c'est une très bonne solution, à condition que l'objet soit copiable.

    Condition nécessaire au cas 2 de ma réponse soit dit en passant, mais pas au cas 1.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par jblecanard Voir le message


    J'imagine qu'il s'agit d'un rapide copier/coller car cette ligne est absurde, entraine de la confusion ... sur un code qui serait risqué

  6. #6
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Pour créer un tableau d'objet, il faut obligatoirement que cette classe possède un constructeur par défaut, car siono il est impossible d'allouer la mémoire nécessaire (à part à créer un tableau de pointeur sur la classe)

    Donc ton exemple ne peut pas marcher si la classe A n'a pas de constructeur par défaut.
    Ensuite, i est pointeur sur la classe A. Donc:


  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    J'imagine qu'il s'agit d'un rapide copier/coller car cette ligne est absurde, entraine de la confusion ... sur un code qui serait risqué
    Oui pardon, au temps pour moi , c'est juste delete[] i;.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 02/10/2014, 16h13
  2. Allocation mémoire (new) dans un constructeur
    Par Khan34 dans le forum C++
    Réponses: 3
    Dernier message: 23/01/2012, 13h57
  3. Différence opérateur new et constructeur
    Par Burckel dans le forum C++
    Réponses: 7
    Dernier message: 16/11/2006, 10h21
  4. appel constructeur sans new
    Par kacedda dans le forum C++
    Réponses: 27
    Dernier message: 01/09/2006, 21h41
  5. [Débutant]Constructeur et new/delete
    Par Geolem dans le forum C++
    Réponses: 5
    Dernier message: 02/12/2005, 21h11

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