這樣的事情會發生什麼?當你多次聲明同一個對象/變量時會發生什麼(新手)
static int i;
// wrapped in a big loop
void update_text()
{
std::stringstream ss; // this gets called again and again
++i;
ss << i;
text = new_text(ss.str()); // text and new_text are defined elsewhere
show_text(text); // so is this
}
確實是在堆棧中用新地址和所有東西創建一個新的ss實例?用char數組使用sprintf會更聰明嗎?
當創建ss的新實例時,它是否使用新的內存或空間? – john
@john:a)你爲什麼要關心? b)它將被放置在函數被調用的堆棧地址對應的堆棧地址處,這可以與先前的實例相同(但不一定是)。它會在創建時在堆上分配它的內部緩衝區,所以每次調用函數時都會分配內部緩衝區,但是無論內存系統是否決定給它相同的內存塊,都是任何人猜測的。所以每次都會創建它,但它可能會重用內存(或者不關心,誰在乎)。 – Grizzly