ob_session_parent_class和ObSessionClass使用G_OBJECT_CLASS转换之后为什么不是一个
时间: 2023-08-12 18:04:11 浏览: 52
ob_session_parent_class和ObSessionClass是两个不同的类结构体,它们的类型不同,因此不能直接进行转换。ob_session_parent_class是ObSessionClass的父类结构体,通过使用G_OBJECT_CLASS进行转换,可以获取到ob_session_parent_class的指针,但是它并不等同于ObSessionClass结构体。在GObject中,每个类都有自己的类结构体和父类结构体,它们分别存储了该类的属性、方法等信息,因此它们是不同的结构体类型。
相关问题
static void ob_session_finalize(GObject *obj) { LOG_INFO("ob_session_finalize begin"); if (G_OBJECT_CLASS(ob_session_parent_class)->finalize) { LOG_INFO("session parent finalize"); G_OBJECT_CLASS(ob_session_parent_class)->finalize(obj); } LOG_INFO("ob_session_finalize end"); }这段代码会不会递归调用
不会递归调用。这是一个 GObject 类的 finalize 函数,它会在对象被销毁时自动调用。在这个函数中,首先会打印出 "ob_session_finalize begin",然后调用父类的 finalize 函数,接着打印 "session parent finalize",最后再打印 "ob_session_finalize end"。由于 GObject 类的 finalize 函数只会被调用一次,因此不会出现递归调用的情况。
使用{__ob__: Observer}改变对象后属性值为空
__ob__: Observer 是 Vue 框架对数据设置的监控器,它是一个非可枚举属性。当你使用{__ob__: Observer}来改变对象后,可能会导致属性值为空的情况。这是因为 __ob__ 属性是 Vue 内部使用的,它不会被 JSON.stringify() 或 Object.assign() 所处理,所以在复制对象时,__ob__ 属性会被忽略。因此,当你使用{__ob__: Observer}来改变对象后,属性值会被清空。