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
足够聪明,可以使前三个步骤变得多余。这将是一个更好的设计,因为我们更喜欢原子替换 - 如果由于某种原因无法添加新孩子,我们应该保留旧孩子。