【发布时间】:2011-04-19 04:32:24
【问题描述】:
我有这段代码,运行良好:
WebKit::WebView web;
// later:
{
Glib::RefPtr<WebKit::WebSettings> settings = WebKit::WebSettings::create();
// do some stuff to the object
web.set_settings(settings);
}
稍后,当web 仍在范围内但settings 已超出范围时,我执行以下操作:
Glib::RefPtr<WebKit::WebSettings> settings = web.get_settings();
这应该恢复上面创建的原始设置对象。然而实际发生的是,我在Glib::wrap_auto(从get_settings 调用)中获得了一个SIGSEGV,输出如下:
GLib-GObject-CRITICAL **: g_object_get_qdata: assertion `G_IS_OBJECT (object)' failed
我的假设是,当第一个 settings 指针超出范围时,它会破坏底层对象,尽管它被分配给另一个对象的属性。为什么会这样?大概我在上面做错了什么,但代码对我来说似乎很理智。 (我假设将对象分配给属性会增加 C 对象的引用计数。)
【问题讨论】: