g_object_unref()析构函数中C ++ Glib :: Object子类的成员指针?

时间:2014-10-20 11:14:23

标签: c++ glib gobject

如果我有来自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()吗?

2 个答案:

答案 0 :(得分:0)

是的,你可能应该这样做。在构造函数中创建mime_object而不是从外部获取原始指针也是最干净的。如果从外部获取原始指针,可能有点不清楚谁拥有该对象并负责释放它。

另请注意,您需要覆盖或禁用复制构造函数,否则如果复制了B,则会出现双重不足情况。

答案 1 :(得分:0)

是的,您需要在析构函数中取消它。您可能还需要在构造函数中调用g_object_ref_sink()以完全正确地引用计数。

GObject继承自GInitiallyUnowned(而非直接来自基地GObject),以&#34;浮动&#34;参考必须是&#34;沉没&#34;。例如,所有GTK小部件都是这种情况。我不知道这是否适用于GMimeObject,但文档会告诉您(或者您可以在运行时调用g_object_is_floating()以确定是否需要接收它)。< / p>

相关问题