2012-07-06 1 views
3

Mon ami et moi parlions l'autre jour du style de code qui est le meilleur.Style de code C++ - Le meilleur endroit pour créer des objets

Cas A:

int function() 
{ 
    largeobject a; 
    //do some stuff without a 
    //do some stuff with a 
} 

Cas B:

int function() 
{ 
    //do some stuff without a 
    largeobject a; 
    //do some stuff with a 
} 

Alors que le code est mieux en terme de vitesse et de lisibilité.

+4

Note de côté, ce sont les deux déclarations de fonction: une fonction appelée 'a' qui ne prend aucun argument et renvoie un' largeobject'. – hmjd

+0

En ce qui concerne la déclaration de la fonction, vous devriez consulter le [C++ FAQ Lite] (http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.2) – maba

+3

Rendez-le lisible en premier. Le compilateur trouvera certainement le code machine le plus optimal dans les deux cas. – tenfour

Répondre

10

Vous devez déclarer les variables/instances d'objet aussi localement que possible. Donc, dans ce cas, B serait la meilleure option. Considérons que si vous le déclarez en haut du corps de votre fonction, d'autres personnes lisant votre code pourraient se demander où vous utilisez réellement l'objet. Par conséquent, en ayant la déclaration près de l'endroit où vous l'utilisez réellement, il sera plus facile à lire.

Il ne devrait pas y avoir de différence énorme performance entre les cas A et B.

Il y a des cas particuliers tels que l'allocation de gros morceaux de mémoire ou d'un pool de threads par exemple. Dans ces cas, comme il pourrait s'agir de temps et de consommation de ressources, vous devrez peut-être trouver un meilleur endroit pour les allouer.

Si vous débutez en programmation, vous pouvez lire le livre Scott Meyers, Effective C++. Le point 26 en parle: Reporter les définitions de variables aussi longtemps que possible.

+2

d'accord, mais les objets avec une méthode complète/portée de la fonction devrait aller directement au début de la fonction/méthode – BigMike

+2

@BigMike Bien sûr, car il sera utilisé pendant toute la méthode/fonction – ALOToverflow

2

Vous devez utiliser le cas B. Il n'est pas nécessaire de créer un objet avant d'en avoir besoin.

De même, votre compilateur n'interprétera pas largeobject a(); comme la création d'un objet avec le constructeur par défaut, mais comme une déclaration de fonction . C'est ce qu'on appelle "l'analyse la plus vexante".

+0

Merci, je l'ai édité – Caesar

0

Le cas B est le meilleur. Cette situation est expliquée dans le livre de S. McConnell - Complete Code. Et vous avez tort avec:

Alors quel code est le meilleur en termes de vitesse et de lisibilité.

Le cas B est meilleur pour d'autres raisons.

+0

I ' Je suis curieux. Souhaitez-vous donner un indice sur les raisons qui sont? – kratenko

Questions connexes