在用它创建布局之后,能否释放PangoContext?

编程语言 2026-07-11

我正在编写一个用于测量文本的库函数。
然而,它不能接受一个 PangoLayout,或任何与Pango相关的东西,除了所用的字体。

我的现有解决方案只是为在函数内部使用而创建一个专门的实例,而那需要一个 PangoContext。不过我们其实并不需要上下文,所以我在想,是否可以在这里就把它释放以节省内存:

static PangoLayout *layout = nullptr;
if (!layout) {
    PangoContext *ctx = pango_context_new();
    layout = pango_layout_new(ctx);
    // Can I call `g_object_unref` on `ctx` here?
}

我能做到吗?还是说这不相关、我只是错过了什么?

解决方案

不,不能。正如 ad absurdum 指出,内部获取布局边界时会对上下文进行解引用,因此在此之前释放它将导致未定义的行为。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章