2016-03-31 35 views
0

我在想如何std::string在內存方面處理其緩衝區。C++字符串+ =運算符內存結果

據我所知,char buf[BUFFER_SIZE];將被分配在堆棧上。所以如果它開始讀入該緩衝區

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; 

所以我的問題主要是在+=操作。當緩衝區與字符串連接時,是否需要重新分配更多內存?作爲後續問題,這個記憶是否需要成爲一個連續的塊?如果是這樣,那麼這個分配是堆還是堆棧操作?

+1

'string'不是'的char []'!這是C++,而不是C. – Olaf

+1

@ 9er面試不是考試。在面試中從不做任何任務。 –

+0

僱主真的希望軟件工程師知道標準類背後的潛在機械嗎? – KevinDTimm

回答

1

std::string是C++中的對象,隱式構造函數將char指針作爲字符串來支持C的字符串文字。 如果你關心內存std::ostringstream可以是+操作更加有用:

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