2012-04-13 11 views
1

Immer wenn ich mit Leuten rede, rebornning sie mich von der Verwendung (in DLL-Projekten) wstrings und Strings, weil sie mehr Speicher verbrauchen als wchar_t Array. Wie geht es damit? Benötigt dasselbe Array L"qweqweqweqweqwe" wchar_t mehr Speicher als wstring oder ist es nicht wahrnehmbar? Jetzt bin ich etwas verwirrt, als ich zwischen Ansi und Unicode (viele new wchar_t temp und delete)C++ mit wstring/wchar_t

+1

Es tut mir leid, aber ich verstehe nicht, was Ihre spezifische Frage ist. Können Sie genauer erklären, worüber Sie neugierig sind? – templatetypedef

Antwort

2

In typischen Nutzung zu konvertieren haben Sie nicht signifikanten Unterschied in der Speichernutzung von string/wstring und Zeichen-Arrays sehen. Auf der anderen Seite, wenn Sie Zeichen-Arrays verwenden, ist Ihr Code anfällig für Fehler und Lecks und Sie werden Ihre ganze Zeit damit verbringen, mit diesen umzugehen.

Es wird von der gesamten C++ - Community akzeptiert, dass std::string die Methode ist, mit Zeichenfolgen umzugehen. Alle Mavericks, die Character-Arrays verwenden wollen, sollten sich mit Benchmarks beweisen. Die Pflicht sollte auf die Freaks sein, um ihre Sichtweise zu beweisen.

5

„viele neue Wchar_t Temp und löschen“

Das ist meist eine sehr schlechte Idee. Wie Stroustrup sagt, sollten Sie sich generell auf Objekte verlassen, um die Speicherverwaltung für Sie durchzuführen (RAII nachschlagen). Verwenden Sie nur rohe Zeiger, wenn es WIRKLICH notwendig ist und nur tief in Ihrer Implementierung. Bevorzugen Sie die STL, bevorzugen Sie Smartpointer, verwenden Sie Boost, schreiben Sie neue und löschen Sie nur, wenn Sie wirklich auf die Ausnahmesicherheit achten müssen. Andernfalls verbringen Sie die meiste Zeit damit, Ihren Code zu debuggen.

Die Antwort ist: Wenn Sie keinen wirklich guten Grund haben, verwenden Sie die String-Klassen. Der Unterschied in der Speichernutzung ist normalerweise unbedeutend. Optimiere nur, wenn der Profiler es dir sagt. "Vorzeitige Optimierung ist die Wurzel allen Übels" (Don Knuth).