/* Allocating an OCaml custom block to hold the given WINDOW * */
static value alloc_window(WINDOW * w)
{
value v = alloc_custom(&curses_window_ops, sizeof(WINDOW *), 0, 1);
Window_val(v) = w;
return v;
}
这是示例中唯一的分配函数。可能,WINDOW
应该分配到其他地方 - 但是如何收集呢?
修改:哦,finalize
结构中的curses_window_ops
函数...请忽略我。
答案 0 :(得分:0)
在此示例代码中,curses窗口由外部函数分配:
external newwin: int -> int -> int -> int -> window = "curses_newwin"
delwin
删除了curses中的Windows。就我所见,示例代码并没有提供调用此函数的方法。
在一个实际的应用程序中,你可以想象在OCaml窗口包装器的终结代码中调用delwin
,但是这种问题是有问题的。它不可能预测何时运行终结代码。你不希望在屏幕上闲停一段未知的时间。
您更有可能希望提供OCaml调用以明确删除窗口。这将使OCaml窗口包装器处于僵尸状态。即,程序员应该记住对象不再代表屏幕上的窗口。最终它将被GC收集(当不再可访问时)。
通过定义像with_window
这样的高阶函数,您可以更好地处理短期窗口。它会在最后删除窗口,因此僵尸窗口无法停留。