#c #webkit #gtk #glib #gtkmm
#c #webkit #gtk #glib #gtkmm
Вопрос:
У меня есть этот фрагмент кода, который работает нормально:
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();
Это должно восстановить исходный объект настроек, созданный выше. Однако на самом деле происходит то, что я получаю SIGSEGV в Glib::wrap_auto
(вызываемый из get_settings
) со следующим выводом:
GLib-GObject-CRITICAL **: g_object_get_qdata: assertion `G_IS_OBJECT (object)' failed
Я предполагаю, что каким-то образом, когда первый settings
указатель выпал из области видимости, он уничтожил базовый объект, несмотря на то, что он был присвоен свойству другого объекта. Почему это происходит? Предположительно, я делаю что-то неправильно выше, но код кажется мне нормальным. (Я предполагаю, что присвоение объекта свойству увеличит количество ссылок на объект C.)
Ответ №1:
вполне возможно, что это ошибка в привязке. Вы должны сообщить об этом.
Комментарии:
1. Да, похоже на то. Недавно я возился с обновлением привязок, чтобы исправить эту проблему, а также включить новые функции webkit, которые в противном случае отсутствовали.
Ответ №2:
Попробуйте это. Понятия не имею, сработает это или нет: P
{
Glib::RefPtr<WebKit::WebSettings> *settings = new WebKit::WebSettings::create();
// do some stuff to the object (use -> instead of . since it's a pointer)
web.set_settings(*settings); // dereference the pointer
}
// later
Glib::RefPtr<WebKit::WebSettings> settings = web.get_settings();
Причина, по которой я думаю, что это сработает, заключается в том, что при настройке указателя будет выделено хранилище в куче, и указатель выйдет из области видимости, но сам объект этого не сделает. Хотя я могу ошибаться, это просто предположение программиста C , у меня нет опыта работы с чем-либо из того, с чем вы работаете (webkit, gtk и т.д.).