Ich arbeite gerade an einem Projekt, bei dem ich gelegentlich X11-Funktionen direkt nutzen muss. Da ich aus einer Windows-Welt komme, in der alles ausführlich dokumentiert ist, habe ich einige Probleme, die relativ spärliche Linux-Dokumentation zu finden und zu bearbeiten.X11 Ressourcenbefreiung (insbesondere Bildschirmobjekte)
Zum Beispiel, wenn ich den Code:
Display* disp;
if (!(disp = XOpenDisplay(NULL))) {
return;
}
Window root = DefaultRootWindow(disp);
Screen* scr = XDefaultScreenOfDisplay(disp);
XCloseDisplay(disp);
Ich weiß, dass XCloseDisplay Window root
aufzuräumen werden, da sie alle Fenster und Ressourcen-IDs zerstört.
Was ich nicht weiß ist, ob ich manuell XFree
Screen
Objekte von X-Funktionen wie XDefaultScreenOfDisplay
wie im Beispiel zurückgegeben werden muss.
Alle Informationen zu diesem Fall oder sogar eine verallgemeinerte Regel für die Verwendung von Xfree wären sehr hilfreich.
Ich weiß, dass die Manpage es nicht explizit erwähnt, aber das Xlib-Handbuch gibt an "Sie müssen XFree verwenden, um alle Objekte freizugeben, die von Xlib zugewiesen wurden." Ich frage mich also, ob der 'Screen *', der von 'XDefaultScreenOfDisplay' zurückgegeben wurde, durch den Funktionsaufruf zugewiesen wurde oder ob er im Wesentlichen ein statisches Mitglied des' Display * 'ist. Daher meine Verwirrung. Ich denke, ich werde lernen, darauf zu vertrauen, wenn die Manpages nicht sagen, etwas zu tun, es ist, weil du es nicht tun musst, nicht weil die Betreuer erwarten, dass du weißt, es zu tun. – jhbh
Die Philosophie, der ich folge, ist **, wenn die Manpage mir nicht sagt, dass ich frei bin, ich nicht frei **. Es scheint zu funktionieren. Es ist eine typische Unix-Philosophie - sie beschwert sich nur oder hebt Informationen hervor, wenn etwas falsch oder anders ist. Wenn nichts falsch ist oder es Standardverhalten ist, sagt es Ihnen nichts darüber. – cup