2016-03-31 4 views
0

Ich frage mich, wie std::string behandelt seine Puffer in Bezug auf Speicher.C++ String + = Operator Speicher Konsequenz

Wie ich es verstehe char buf[BUFFER_SIZE]; wird auf dem Stapel zugeordnet werden. Also, wenn es in diesen Puffer

string result; 
oFile.read(buf, BUFFER_SIZE-1); 
bytesRead = oFile.gcount(); //get # of chars read into buffer 
buf[bytesRead] = '\0';   //terminate with a null 
sFinal += buf; 

So ist meine Frage in erster Linie auf dem += Betrieb Lese beginnen. Wenn der Puffer mit der Zeichenfolge verkettet wird, muss mehr Speicher neu zugewiesen werden? Als eine Follow-up-Frage muss dieses Gedächtnis ein kontinuierlicher Block sein? Wenn ja, wäre diese Zuweisung eine Heap- oder Stapeloperation?

+1

'string' ist kein' char [] '! Das ist C++, nicht C. – Olaf

+1

@ 9er Interview ist keine Prüfung. Machen Sie niemals Aufgaben in einem Interview. –

+0

Erwarten Arbeitgeber wirklich, dass SW-Ingenieure die zugrunde liegenden Machenschaften hinter Standardklassen kennen? – KevinDTimm

Antwort

1

std::string ist ein Objekt in C++, dann implizite Konstruktoren erhalten Zeichenzeiger als Zeichenfolge zur Unterstützung von C String-Literalen. Wenn Sie Speicher Pflege ein std::ostringstream kann nützlicher sein, dass der Operator +:

std::ostringstream result("hello"); 
result << " world!"; 
std::cout << result.str(); 
//prints "hello world!"