Beide tst_first_string
und tst_second_string
gebaut werden:
In meinem Code, so scheint es, dass der Konstruktor mehr Speicherplatz wird tst_first_string
als für tst_second_string
zu konstruieren. Da die Anzahl der Zeichen vor der Nul-Terminator in beiden Fällen gleich ist, würden Sie vorstellen, dass die Konstruktion genau identisch sein wird. Das heißt, der C++ - Standard ist absichtlich vage, was in Bezug auf die Speicherverwaltung passieren muss, so dass Sie nicht mit absoluter Sicherheit wissen werden.
Beachten Sie auch, dass viele std::string
Implementierungen nutzen, um eine kurze Zeichenfolge Optimierung Technik für kleine Strings, die das gesamte Objekt verursacht mit automatischer Speicherdauer in den Speicher geschrieben werden. In Ihrem Fall wird dynamischer Speicher möglicherweise überhaupt nicht verwendet.
Was wir wissen, für sicher ist, dass von C++ 11 ab, kopieren Sie auf Schreib Semantik für std::string
ist nicht mehr zulässig, so zwei verschiedene Strings wird erstellt werden.
*** wenn std :: string Alloc jedes Mal in C++ *** Ich glaube, es ist die Implementierung definiert und mit den meisten Implementierungen ist die Antwort nein. – drescherjm
http://stackoverflow.com/questions/21694302/what-are-the-mechanics-of-short-string-optimization-in-libc – tkausl