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

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

Ich habe eine Variable im Dateiumfang.Ist das eine schlechte Übung? C++

Ich weiß nicht wirklich, wie ich meine Frage formulieren soll. Aber im Grunde kopiere ich eine Klasse und dieser Code sieht ziemlich funky aus. Gibt es irgendwelche Konsequenzen davon? Sollte ich stattdessen new/delete verwenden? Ein potentielles Problem, das ich mir vorstellen kann, ist, wenn die Klasse Zeiger enthält (aber das könnte man dann durch Erstellen eines Kopierkonstruktors lösen)

+0

Ja, C++ ist schlechte Praxis ... Scherze, nur Spaß. Nimm es leicht, mein Freund. – JimDaniel

Antwort

1

Angenommen, Ihre Klasse kann korrekt kopieren, dann sehe ich nichts inhärent falsch damit. Aber es ist nicht so effizient, da myclass tatsächlich zweimal initialisiert wird: einmal, wo es deklariert ist, und wieder, wo Sie ihm eine andere Instanz zuweisen.

Wenn das Ihre Logik erfordert, ist es in Ordnung. Andernfalls könnten Sie Ihren Code effizienter machen.

0

Es ist nichts falsch mit dem, was Sie getan haben, obwohl es nicht klar ist, was der Punkt ist. Manchmal wird diese Art von Bedingung bedingt ausgeführt, beispielsweise wenn Befehlszeilenargumente einen alternativen Wert für die Variable angeben. Sie müssen nicht neu verwenden und löschen ... In diesem Fall bitten Sie den Compiler, ein temporäres Objekt zu erstellen, das dann in die globale Variable kopiert wird (mit seiner operator=), dann wird das temporäre zerstört. Die Effizienz ist typischerweise zumindest ein wenig schlechter als wenn direkt eine Variable mit dem gewünschten Wert direkt konstruiert wird, aber kein Punkt bei vorzeitiger oder unnötiger Optimierung.

Zum Vergleich betrachten:

std::string sep = "\n"; 

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

Dies ist mehr oder weniger das gleiche tun, wenn auch hier die explizite Konstruktion eines std::string temporäre optional ist wie die Klasse eine operator=(const char*) haben passiert. Alles gut.

2

Ich würde sagen, dass globale Variablen in der Regel unerwünscht sind. Es bedeutet nicht, dass sie illegal oder "schlechter Stil" sind. Ich würde definitiv vermeiden, Globals in diesem speziellen Fall zu verwenden ...

+0

oh sie ** sind ** schlechter Stil, definitiv! Warum glaubst du, dass das "Singleton" Anti-Pattern so sehr hasst;)? –

+0

@Matthieu M. Ich versuche starke Worte zu vermeiden :) – a1ex07

Verwandte Themen