Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;Glib::析构函数中的对象子类? 如果我有从C++代码> GLYB派生的C++类:对象< /代码>,从GMIME指针指向Gy对象(C接口): /* schematic set up of class */ class B : public Glib::Object { public: GMimeObject * mime_object; };_C++_Glib_Gobject - Fatal编程技术网

C++;Glib::析构函数中的对象子类? 如果我有从C++代码> GLYB派生的C++类:对象< /代码>,从GMIME指针指向Gy对象(C接口): /* schematic set up of class */ class B : public Glib::Object { public: GMimeObject * mime_object; };

C++;Glib::析构函数中的对象子类? 如果我有从C++代码> GLYB派生的C++类:对象< /代码>,从GMIME指针指向Gy对象(C接口): /* schematic set up of class */ class B : public Glib::Object { public: GMimeObject * mime_object; };,c++,glib,gobject,C++,Glib,Gobject,创建mime_对象,然后在实例化时将其传递给class B。它不是g\u object\u unref()'ed。我应该g\u object\u unref()在析构函数类B::~B()?是的,你可能应该这样做。在构造函数中创建mime\u对象,而不是从外部获取原始指针,这将是最干净的。如果从外部获取原始指针,可能有点不清楚谁拥有该对象,谁负责释放该对象 还请注意,您需要重写或禁用复制构造函数,否则如果复制了B,则会出现双重取消引用的情况。是的,您需要在析构函数中取消引用它。您可能还需要在构造函

创建
mime_对象
,然后在实例化时将其传递给
class B
。它不是
g\u object\u unref()
'ed。我应该
g\u object\u unref()
在析构函数
类B::~B()

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


还请注意,您需要重写或禁用复制构造函数,否则如果复制了
B
,则会出现双重取消引用的情况。

是的,您需要在析构函数中取消引用它。您可能还需要在构造函数中调用
g\u object\u ref\u sink()
,以获得正确的refcounting


GObject
s继承自
GInitiallyUnowned
(而不是直接从基
GObject
)的,从“浮动”引用开始,该引用必须是“沉没”的。例如,所有GTK小部件都是这样。我不知道这是否适用于
GMimeObject
,但文档会告诉你(或者你可以在运行时调用
g\u object\u is\u floating()
,看看是否需要将其下沉)。

我想我应该早点发现这一点:,无论如何,谢谢。事实上,对于我的具体情况,答案并不正确,但我认为它在一般情况下正确地回答了这个问题。对于我的情况,我可能应该在构造函数中执行一个g_object_ref()(然后在Destructor中执行unref())。