2

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 つの手順を冗長にするほど が賢いかどうかは疑問です。アトミックな置換を好むため、これはより良い設計です。何らかの理由で新しい子を追加できない場合は、古い子を保持する必要があります。

4

1 に答える 1