Json-C には、このぎこちなく文書化されていない参照カウントがあり、これが問題を引き起こしています。特に、子を含むオブジェクトがあり、特定の子を
json_object_object_add(parent, "child name", new_child)
.
これで の所有権が譲渡されることがわかりましたnew_child
。問題ありません。しかし、古い子供はどうですか?で手動で削除できますがjson_object_object_del
、古い子は削除されません (ただし、リークします)。したがって、次の解決策が適切な代替品であるようです。
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 つの手順を冗長にするほど が賢いかどうかは疑問です。アトミックな置換を好むため、これはより良い設計です。何らかの理由で新しい子を追加できない場合は、古い子を保持する必要があります。