將靜態變量作爲引用返回並作爲指針直接傳遞給另一個函數時會發生什麼?顯然,變量在函數返回後依然存在,但關於這個概念的一些事情讓我感到困擾。在哪一點上,數據後綴上的內存由靜態變量佔用,釋放?運行時是否會奇蹟般地注意到我不再需要它,比如某種垃圾收集?將靜態局部變量作爲引用返回
舉個例子:
SDL_Rect* XSDL_RectConstr(int x, int y, int w, int h)
{
static SDL_Rect rect;
rect.x = x;
rect.y = y;
rect.w = w;
rect.h = h;
return ▭
}
void mainLoop()
{
while(isRunning)
{
pollEvents();
SDL_BlitSurface(someSurface, XSDL_RectConstr(0, 0, 100, 100), screen, NULL);
SDL_Flip(screen);
}
}
SDL_BlitSurface()返回後會發生什麼rect
?我無法看到它何時會被釋放。那麼這會不會是某種內存泄漏?
因此,它仍然會佔用大量的內存,因爲它在無限循環中運行,對吧?還是每次調用XSDL_RectConstr()時都會覆蓋自身?此外,SDL_rect是一個結構,而不是一個類,因此沒有析構函數,但我想這是無關緊要的。 – CaffeineAddict
它覆蓋自身,這就是問題所在。每個結構體(和每個類)都有一個析構函數,如果你不寫一個,就會生成一個默認的結構體。 – john
它不會「覆蓋」任何東西。這是同一個對象。這裏唯一的奇妙之處在於它只有在你第一次輸入該函數時纔會被構造出來;除了通常的範圍規則之外,與命名空間範圍中定義的'static'相比,這沒什麼不同。它就像一個靜態的「成員」的功能。 –