Est ce que ce bout de code génère une allocation ?

Est ce que ce bout de code génère une allocation ? - C++ - Programmation

Marsh Posté le 01-06-2010 à 15:53:23    

Salut à tous. J'ai une classe toto qui contient notamment un tableau et tout les trucs qui vont bien (Coplien, un opérateur [],etc...).
Je fais une fonction qui ressemble à ça :  
 

Code :
  1. Toto  mafonction(Toto & src)
  2. {
  3.      Toto dest(src.size());
  4.      for(int i = 0 ; i < src.size() ; ++i)
  5.            dest[i] = truc(src[i]);
  6. return dest;
  7. }


 
si je l'appelle comme ça :  
 

Code :
  1. /**/
  2. int size = 1000;
  3. Toto A (size);
  4. Toto B (size);
  5. /**/
  6. B = mafonction(A);
  7. /**/


 
Est ce que "dest" va être alloué ou pas?


Message édité par snafu8 le 01-06-2010 à 16:00:04
Reply

Marsh Posté le 01-06-2010 à 15:53:23   

Reply

Marsh Posté le 01-06-2010 à 16:36:30    

Salut,
 
Qu'est-ce que tu appelles une allocation? Une allocation dynamique? Dans ce cas non (sauf s'il y en a une dans le constructeur de Toto).
 
Un objet Toto est construit dans mafonction. Une copie est retournée qui est ensuite copiée dans B (le compilateur supprime surement une des copies).
 
Tu peux utiliser un debugger pour mettre un breakpoint dans tes constructeurs (normal et par copie) pour vérifier tout cela.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 01-06-2010 à 17:39:15    

il va certainement etre élidé par le principe de Named Return Value Optimization:
 
http://cpp-next.com/archive/2009/0 [...] -by-value/
 
Je parle bien evidemment des compilos corrects :o

Reply

Marsh Posté le 01-06-2010 à 18:33:51    

Ok,
 
btw, par "compilo correct", tu veux dire "n'importe quel compilo sauf apple gcc 4.2"?

Reply

Marsh Posté le 01-06-2010 à 19:11:06    

oui :€
en etant serieux, dans le lien que j'ai donné y a un petit ficheir qui compte les elisions. Donc recupére le et test sur gcc apple 4.crap

Reply

Marsh Posté le 01-06-2010 à 20:28:40    

Sache que tu as été mauvaise langue, mon compilo n'en manque qu'une. Je pense que ca va me plaire cette affaire. Apres avoir passé des années à apprendre comment pense un compilateur pour éviter de lui faire faire des copies inutiles, maintenant, je vais devoir désapprendre parce qu'il a appris à réfléchir comme moi.

Reply

Marsh Posté le 02-06-2010 à 06:48:24    

bonne nouvelle donc.

Reply

Sujets relatifs:

Leave a Replay

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