2011-01-12 4 views
3
Class1 myclass(someparameter); 

int main(int argc, char* argv[]) 
{ 
    myclass = Class1(anotherparameter); 
} 

J'ai une variable à portée de fichier.Est-ce une mauvaise pratique? C++

Je ne sais pas vraiment comment formuler ma question. Mais fondamentalement, je copie une classe et ce code a l'air assez génial. Y a-t-il des conséquences à cela? Dois-je utiliser new/delete à la place? Un problème potentiel que je peux penser est si la classe contient des pointeurs (mais alors cela pourrait être résolu en créant un constructeur de copie)

+0

Oui, C++ est une mauvaise pratique ... plaisanter, juste plaisanter. Allez-y doucement, mon ami. – JimDaniel

Répondre

1

En supposant que votre classe puisse copier correctement, je ne vois rien de mal à cela. Mais ce n'est pas très efficace puisque myclass est réellement initialisé deux fois: une fois où il est déclaré, et encore une fois où vous lui attribuez une autre instance.

Si c'est ce que votre logique exige, c'est bon. Sinon, vous pourriez rendre votre code plus efficace.

0

Il n'y a rien de mal avec ce que vous avez fait, bien que ce n'est pas clair ce que le point est. Parfois, ce genre de chose est fait conditionnellement - par exemple, si les arguments de la ligne de commande spécifient une valeur alternative pour la variable. Vous n'avez pas besoin d'utiliser new et delete ... dans ce cas vous demandez au compilateur de créer un objet temporaire qui sera ensuite copié dans la variable globale (en utilisant son operator=), puis le temporaire sera détruit. L'efficacité est typiquement au moins un peu moins bonne que lorsqu'on construit directement une variable avec la valeur désirée directement, mais pas d'optimisation prématurée ou inutile.

À titre de comparaison, tenez compte:

std::string sep = "\n"; 

int main(...) 
{ 
    if (...) 
     sep = std::string("\r\n"); 
} 

Cela fait plus ou moins la même chose, mais ici la construction explicite d'une option est temporaire std::string que cette classe se trouve à avoir un operator=(const char*). Tout bon.

2

Je dirais que les variables globales sont généralement non désirées. Cela ne signifie pas qu'ils sont illégaux ou "mauvais style" cependant. J'éviterais certainement d'utiliser des globals dans ce cas particulier ...

+0

oh ils ** sont ** mauvais style, certainement! Pourquoi pensez-vous que l'anti-pattern "Singleton" est si détestable;)? –

+0

@Matthieu M. J'essaie d'éviter les mots forts :) – a1ex07

Questions connexes