参照として返され、別の関数に直接ポインターとして渡されると、静的変数はどうなりますか?明らかに、変数は関数が戻った後も存続しますが、この概念全体についての何かが私を悩ませています。データのメモリはどの時点で解放されますか?静的変数によって占有されていますか?ある種のガベージコレクションのように、ランタイムは不要になったときに魔法のように気づきますか?
例を挙げると:
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);
}
}
rect
SDL_BlitSurface()が戻った後はどうなりますか?いつ解放されるかわかりません。それでは、これはある種のメモリリークではないでしょうか。