7

アプリケーションでデスクトップ通知を表示するためにlibnotifyを使用しています。 を返します。これは、通知ライブラリの以降の関数呼び出しに最初のパラメーターとして渡す必要があります。notify_notification_new()NotifyNotification*

notify_notification_free()返されるポインタを解放するものはありません。のソースを調べたところ、notify_notification_new()内部で a を実行し、 GObject*g_object_new()を取得して として返すので、アプリケーションがクリーンアップを行うときに、 によって返されたポインタでa を呼び出す必要がありますか?NotfiyNotification*g_object_unref()notify_notification_new()

4

2 に答える 2

13

はい、参照が「フローティング」でない限り。GInitiallyUnownedフローティング参照を使用するサブクラス。最も一般的な使用法はGTKウィジェットです。

関数を使用してGTKウィジェットを作成するgtk_whatever_new()と、フローティングとしてマークされた参照が1つあります。ウィジェットをコンテナーに追加する場合、コンテナーはウィジェットへの参照も保持する必要があります。ただしg_object_ref()、ウィジェットを呼び出して参照数を2に増やす代わりに、オブジェクトのフローティング参照を「シンク」して、通常の参照に変換します。コンテナがウィジェットを「所有」していると言えます。

次に、コンテナを破棄するとg_object_unref()、ウィジェットが呼び出され、参照カウントがゼロになり、ウィジェットが破棄されます。そうすれば、あなたはもうそれを自分で破壊する責任がありません。

したがって、通常GObjectはコンテナに入らない通常のsでは、所有権の譲渡はありません。使い終わったら、自分で参照を解除する必要があります。

于 2010-05-17T13:29:16.267 に答える
3

答えはイエスです。所有権に関する Gnome のページから理解しました。後で誰かの役に立てば幸いです。

于 2010-05-17T10:47:19.020 に答える