X11资源释放(特别是Screen对象)

时间:2017-06-13 11:40:24

标签: c++ x11 xlib

我目前正在开展一个项目,我偶尔需要直接使用X11函数。来自一个广泛记录所有内容的Windows世界,我在查找和浏览相对稀疏的linux文档时遇到了一些麻烦。

例如,如果我有代码:

Display* disp;
if (!(disp = XOpenDisplay(NULL))) {
    return;
}

Window root = DefaultRootWindow(disp);
Screen* scr = XDefaultScreenOfDisplay(disp);

XCloseDisplay(disp);

我知道XCloseDisplay将清除Window root,因为它会破坏所有窗口和资源ID。

我不知道的是,我是否需要根据示例手动XFree ScreenXDefaultScreenOfDisplay等X函数返回的对象。

有关此案例的任何信息,甚至是何时使用Xfree的一般规则都将非常有用。

2 个答案:

答案 0 :(得分:2)

Raw X,就像Windows SDK一样是C接口。

X-Windows约有7本手册,如http://shop.oreilly.com/product/9781565920026.dohttp://shop.oreilly.com/product/9781565920033.do。这些都是自1992年以来一直存在。像Windows一样,它们充满了例子。另外还有互联网 - 只需输入命令,大多数页面都在线。

手册页将告诉您命令是否需要释放。

XDefaultScreenOfDisplay的手册页未提及释放,因此不需要它。

如果查看XGetVisualInfo的手册页,它会说你可以释放使用XFree返回的结构。

答案 1 :(得分:2)

  

应用程序不应直接修改显示和屏幕结构的任何部分。这些成员应该被认为是只读的,尽管它们可能会因显示器上的其他操作而改变。

这意味着这些结构由XLib管理,一个不应该 freeXFree他们。释放结构意味着它占用的内存可以分配给其他数据并最终被覆盖。