Ich habe ein C++ - Programm, das eine std :: list verwendet, die Instanzen einer Klasse enthält. Wenn ich z.B. myList.push_back(MyClass(variable));
es durchläuft den Prozess der Erstellung einer temporären Variable, und kopiert dann sofort in den Vektor und löscht anschließend die temporäre Variable. Dies ist nicht annähernd so effizient wie ich es will, und saugt, wenn Sie eine tiefe Kopie benötigen.So initialisieren Sie einen AWL-Vektor/eine Liste mit einer Klasse, ohne den Kopierkonstruktor aufzurufen
Ich hätte gerne den Konstruktor meiner Klasse new
etwas und muss nicht einen Kopierkonstruktor implementieren, nur um meinen Speicher für das zweite Mal zuzuordnen und verschwenden Laufzeit. Ich möchte auch nicht sofort die Klasseninstanz aus dem Vektor/der Liste finden und dann manuell den Speicher zuweisen (oder etwas Schreckliches tun, wie den Speicher im Kopierkonstruktor selbst zuweisen).
Gibt es einen Weg um dies (ich verwende nicht Visual Studio BTW)?
Welchen Compiler benutzen Sie? Ich glaube, dass dieser Fall normalerweise in neueren Compilern optimiert wird. –
Führen Sie diese Analyse mit einem optimierten Build durch? –
Sie müssen mit einem Release-Build testen. Es kann dies im DEBUG-Modus tun, aber verwenden Sie RVO (Rückgabewert-Optimierung) im Freigabemodus, die die Kopie beseitigt. – Nate