如果我有来自Glib::Object
的C ++类,并且指向GMime的g_object(C接口):
/* schematic set up of class */
class B : public Glib::Object {
public:
GMimeObject * mime_object;
};
创建mime_object
,然后在实例化时传递给class B
。它不是g_object_unref()
。我应该在析构函数g_object_unref()
中class B::~B()
吗?
答案 0 :(得分:0)
是的,你可能应该这样做。在构造函数中创建mime_object
而不是从外部获取原始指针也是最干净的。如果从外部获取原始指针,可能有点不清楚谁拥有该对象并负责释放它。
另请注意,您需要覆盖或禁用复制构造函数,否则如果复制了B
,则会出现双重不足情况。
答案 1 :(得分:0)
是的,您需要在析构函数中取消它。您可能还需要在构造函数中调用g_object_ref_sink()
以完全正确地引用计数。
GObject
继承自GInitiallyUnowned
(而非直接来自基地GObject
),以"浮动"参考必须是"沉没"。例如,所有GTK小部件都是这种情况。我不知道这是否适用于GMimeObject
,但文档会告诉您(或者您可以在运行时调用g_object_is_floating()
以确定是否需要接收它)。< / p>