constructeur et liste d'initialisation

constructeur et liste d'initialisation - C++ - Programmation

Marsh Posté le 16-02-2011 à 10:13:59    

bonjour,
 
Est ce plus rapide de faire :
 

Code :
  1. class A
  2. {
  3.   public:
  4. A() : a(1) {}
  5. int a;
  6. };


 
vs  
 

Code :
  1. class A
  2. {
  3.   public:
  4. A() { a = 1 ;}
  5. int a;
  6. };


 
 
merci par avance

Reply

Marsh Posté le 16-02-2011 à 10:13:59   

Reply

Marsh Posté le 16-02-2011 à 10:34:19    

Pour un type primitif, ca ne changera pas grand chose en release, vu qu'ils ne seront pas initialisés par défaut. Reste que c'est toujours mieux, quand on a le choix de passer par une initialisation.
 
si a avait été une instance d'une classe, dans ta solution 1, tu passerais juste par le constructeur qui t'intéresse, alors que dans la solution 2, tu passerais par le constructeur par défaut puis par l'opérateur de copie.


---------------
last.fm
Reply

Marsh Posté le 17-02-2011 à 11:43:27    

hello theshockwave
 
merci pour ta réponse, tu veux dire que pour la solution 1 :
 

Code :
  1. A a;


 
invoque juste le constructeur, alors que pour 2 on invoque constructeur et opérateur de copie ..??

Reply

Marsh Posté le 17-02-2011 à 12:02:48    

Pour les types definis par l'utilisateur, oui.  Pour int, c'est simplement non initialise dans le cas 2.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 17-02-2011 à 12:08:14    

Code :
  1. #include <iostream>
  2. using namespace std;
  3. struct A
  4. {
  5.     A() : i( 0 )                  { cout << "A::A()" << endl; };
  6.     A( const A& a ) : i( a.i )    { cout << "A::A(A)" << endl; };
  7.     A( int i ) : i( i )           { cout << "A::A(int)" << endl; };
  8.     const A& operator = ( int i ) { this->i = i; cout << "A::operator=(int)" << endl; };
  9.     ~A()                          { cout << "A::~A()" << endl; };
  10.     int i;
  11. };
  12. struct B
  13. {
  14.     B( int i ) { a = i; };
  15.     A a;
  16. };
  17. struct C
  18. {
  19.     C( int i ) : a( i ) {};
  20.     A a;
  21. };
  22. int main()
  23. {
  24.     cout << "B :" << endl;
  25.     B b( 1 );
  26.     cout << "C :" << endl;
  27.     C c( 2 );
  28.     cout << "Destruction :" << endl;
  29.     return 0;
  30. }


 

Code :
  1. $ g++ plop.cpp -o plop.exe && ./plop.exe
  2. B :
  3. A::A()
  4. A::operator=(int)
  5. C :
  6. A::A(int)
  7. Destruction :
  8. A::~A()
  9. A::~A()


 
Edit : mise en forme


Message édité par theshockwave le 17-02-2011 à 12:10:44

---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed