1

私はこのコードを持っていますが、これは正常に機能しています:

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(から呼び出された)でSIGSEGVを取得することです。get_settings

GLib-GObject-CRITICAL **: g_object_get_qdata: assertion `G_IS_OBJECT (object)' failed

私の仮定では、最初のsettingsポインターがスコープから外れると、別のオブジェクトのプロパティに割り当てられているにもかかわらず、基になるオブジェクトが破壊されたと考えられます。なぜそれが起こっているのですか?おそらく私は上記で何か間違ったことをしているのでしょうが、コードは私には正気のようです。(オブジェクトをプロパティに割り当てると、Cオブジェクトの参照カウントが増えると思います。)

4

2 に答える 2

0

バインディングのバグである可能性があります。あなたはそれを報告するべきです。

于 2011-04-19T12:34:24.550 に答える
0

これを試して。それが機能するかどうかわからない: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など)のいずれについても経験がありません。

于 2011-04-19T05:26:53.013 に答える