- から
A
継承しB
ます。次に、のA
すべてB
のプロパティが自動的に設定されます。
- でプロパティを使用しないでください
A
。代わりに、B
のプロパティ(またはさらに良いのはすでに構築されたB
オブジェクト)をパラメータとしてA
'コンストラクタに渡します。
B
までの構築を遅らせるA
ことで、構成がどのように必要かを理解できますB
。の内部ポインタが有効かどうかA
を示すプライベートフラグなどを追加します。b_initialized
A
B
2番目の提案に関するもう少し説明:
A
のものは、マクロa_init()
によって提供される関数で構築されます。G_DEFINE_TYPE()
しかし、それはあなたがのインスタンスを取得する方法ではありませんA
。通常、のパブリックインターフェイスの一部である関数を次のように記述しますA
。
A *a_new()
{
return (A *)g_object_new(TYPE_A, NULL);
}
これを簡単に拡張して、他のパラメーターを含めることができます。
A *a_new(int b_param_1, int b_param_2)
{
A *a = (A *)g_object_new(TYPE_A, NULL);
a->priv->b = b_new(b_param_1, b_param_2);
return a;
}
これには、たとえばGtkBuilderファイルからオブジェクトを構築しようとしている場合など、オブジェクトを使用して構築した場合A
に、オブジェクトが無効な状態(つまり、なし)のままになるという欠点があります。それが問題である場合でも、リファクタリングを強くお勧めします。B
g_object_new