【发布时间】:2017-07-28 18:58:41
【问题描述】:
我正在阅读lecture on GTK+ memory management,“对象从GInitiallyUnowned 下降”一章。引入了浮动引用的概念,方便我们编写代码
container = create_container();
container_add_child(container, create_child());
而不是
Child *child;
container = create_container();
child = create_child();
container_add_child(container, child);
g_object_unref(child);
我立刻意识到,同样可以实现如下。有一个函数container_add_child_move_ownership。 container_add_child 是多余的。假设container_add_child_move_ownership(container, child) 将所有权从调用者转移到container,因此container_add_child_move_ownership 不会更改引用计数。因此,下面的例子是正确的。
void f(Container *container) {
container_add_child_move_ownership(container, create_child());
}
要么 0) 我的解决方案有一个我看不到的缺陷,要么 1) 浮动引用的概念是一个糟糕的设计决策。哪个是真的?
【问题讨论】:
标签: memory-management garbage-collection gobject