Json-Cには、このように不完全で、文書化されていないリファレンスカウントがあり、問題が生じています。特に、私たちは子供を含むオブジェクトを持っており、特定の子供をjson_object_object_addは既存のエントリを置き換えることができますか?
json_object_object_add(parent, "child name", new_child)
と置き換えたいと考えています。
ここではの所有権はnew_child
になりますが、問題はありません。しかし、古い子供はどうですか? json_object_object_del
(doesn't delete the old child (but leaks it))で手動で削除できます。だから、次のソリューションは、適切な代替品です表示されます。
json_object *manual = json_object_object_get(parent, "child name");
json_object_object_del(parent, "child name");
json_object_put(manual);
json_object_object_add(parent, "child name", new_child);
json_object_object_add
は、最初の3つのステップを冗長にするために十分にスマートである場合は、私たちは迷っています。原子置換を好むので、これはより良い設計になります。何らかの理由で新しい子を追加できない場合は、古い子を保つ必要があります。