現在、私は時々X11関数を直接使う必要があるプロジェクトに取り組んでいます。すべてが広く文書化されているWindowsの世界から出てくる、私は比較的希薄なLinuxのドキュメントを見つけて掘り下げるのに苦労しています。例えばX11リソース解放(特にScreenオブジェクト)
、私はコードを持っている場合:
Display* disp;
if (!(disp = XOpenDisplay(NULL))) {
return;
}
Window root = DefaultRootWindow(disp);
Screen* scr = XDefaultScreenOfDisplay(disp);
XCloseDisplay(disp);
を私はそれがすべてのウィンドウとリソースIDを破壊するため、XCloseDisplayがWindow root
をクリーンアップすることがわかっています。
私が手作業で行う必要があるかどうかわからないのは、XFree
Screen
例のようにX関数から返されたオブジェクトがXDefaultScreenOfDisplay
です。
このケースに関する情報、またはXfreeをいつ使うべきかに関する一般的な規則さえあれば、非常に役に立ちます。
マニュアルページに明示的に言及していませんが、Xlibマニュアルには「Xlibによって割り当てられたオブジェクトを解放するためにXFreeを使用する必要があります」と記載されています。だから私は、 'XDefaultScreenOfDisplay'によって返された' Screen * 'が関数呼び出しによってalloc'dされているのか、それとも本質的に' Display * 'の静的メンバーであるかどうか疑問に思っています。それで私の混乱。 私は、メンテナがあなたがそれをするのを知っていると期待しているわけではないので、あなたがそれをする必要はないので、何かをするためにマンページが言わないならば、それを信じることを学ぶでしょう。 – jhbh
私が従う哲学は、マニュアルページが私に解放するように言わなければ、私は自由ではない**です。それは動作するようです。これは典型的なUnixの哲学です。何かが間違っているか違う場合にのみ、情報に不満を抱かせたり強調したりします。何も間違っていたり、標準的な動作でなければ、それについて教えてくれません。 – cup