Gobject tutorial 一

  参考: https://github.com/ToshioCP/Gobject-tutorial/tree/main?tab=readme-ov-file

Gobject class and instance

Gobject 实例是通过函数g_object_new创建的。Gobject不仅包含实例还包含类。

  • Gobject的类是在第一次调用g_object_new函数时被创建的。并且对于一个特定的对象,类只有一个。
  • Gobject的实例是每次调用g_object_new时,都会被创建。因此,实例是可以同时存在多个的。

从广义上来说,GObject是一个包含类和实例的对象。从狭义上来说,GObject仅仅是一个C结构体的定义。

typedef struct _GObject  GObject;
struct  _GObject
{GTypeInstance  g_type_instance;/*< private >*/guint          ref_count;  /* (atomic) */GData         *qdata;
};

 g_object_new函数分配一个sizeof(GObject)大小的内存,并进行初始化,函数返回值是指向此分配内存的指针。此分配的内存就是一个GObject实例,也就是说一个GObject实例就是一块内存。同理,GObject 类也是一块由g_object_new分配的内存。

#include <glib-object.h>int
main (int argc, char **argv) {GObject *instance1, *instance2;GObjectClass *class1, *class2;instance1 = g_object_new (G_TYPE_OBJECT, NULL);instance2 = g_object_new (G_TYPE_OBJECT, NULL);g_print ("The address of instance1 is %p\n", instance1);g_print ("The address of instance2 is %p\n", instance2);class1 = G_OBJECT_GET_CLASS (instance1);class2 = G_OBJECT_GET_CLASS (instance2);g_print ("The address of the class of instance1 is %p\n", class1);g_print ("The address of the class of instance2 is %p\n", class2);g_object_unref (instance1);g_object_unref (instance2);return 0;
}

上述程序运行结果如下:

The address of instance1 is 0x55b28a0d2a00
The address of instance2 is 0x55b28a0d2a20
The address of the class of instance1 is 0x55b28a0d2830
The address of the class of instance2 is 0x55b28a0d2830

即:instanace1 和instance2所指代的内存位置不同,因此是两个不同的instance,但是二者所属的类的地址是一致的。因此证明,对于所有的GObject类型的实例,其类只有一个。

在上例中,G_TYPE_OBJECT就是Gobject的类型,在glib 源码中你会发现g_object_new的声明如下:

gpointer    g_object_new                      (GType           object_type,const gchar    *first_property_name,...);

在Gobject中存在一个类型系统,类型系统属于Gobject的一个基础系统。每个数据类型都必须在类型系统中进行注册。

Reference Count

由于一个Gobject实例占据一段内存,当实例不再使用时,需要释放此段内存,那么,问题来了,怎么确认一个实例在用还是没有用了? reference count就是来解决这个问题的。

如果一个创建出来的Gobjet实例同时被A和B使用,此时,reference count 的值就是2.当A或B使用同一个Gobject实例时,都会调用g_object_ref,使对象的reference count增加1,不使用时,都会调用g_object_unref,使对象的reference count减1.当Gobject实例的reference count值为0时,表示此实例不再使用,实例就会自动销毁。调用g_object_new生成Gobject 实例时, 此实例的reference count 值为1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/27219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HyperBDR新版本上线,自动化容灾兼容再升级!

本次HyperBDR v5.5.0版本新增完成HCS&#xff08;Huawei Cloud Stack&#xff09;8.3.x和HCSO&#xff08;Huawei Cloud Stack Online&#xff09;自动化对接&#xff0c;另外还突破性完成了Oracle云(块存储模式)的自动化对接。 HyperBDR&#xff0c;云原生业务级别容灾工具。支…

确定性网络_v0

目录 一、背景二、技术参考文献 一、背景 确定性网络&#xff08;Deterministic Networking&#xff09;是提供确定性服务质量的网络技术&#xff0c;是在以太网的基础上为多种业务提供端到端确定性服务质量保障的一种新技术。通过对网络数据转发行为的控制&#xff0c;将时延…

【渗透测试】|dvwa命令注入乱码问题

法一&#xff1a; 解决方法如下&#xff1a; 1、按住winr&#xff0c;在运行框中输入cmd弹出命令行&#xff0c;在命令行中输入“control intl.cpl” 2、这个命令是使用control命令行工具来打开"区域和语言设置"对话框 3、选中对话框中的管理选项卡 4、可以看到这里…

linux 安装 Nginx 并部署 vue 项目

1、安装 yum install nginx2、使用 nginx 命令 查看nginx状态 systemctl status nginx 启动服务 systemctl start nginx停止服务 systemctl stop nginx重启服务 systemctl restart nginx修改配置后重载 systemctl reload nginx 加入开机自启动 systemctl enable ngin…

前端开发之HTTP协议认识

上一篇&#x1f449;: 前端开发之WebSocket通信 文章目录 1. HTTP 1.0 和 HTTP 1.1 之间有哪些区别1.连接方面&#xff1a;2.资源传输优化&#xff1a;3.缓存机制增强&#xff1a;4.主机头识别5.请求方法扩展 2.HTTP 1.1 和 HTTP 2.0 的区别1. 二进制分帧层&#xff1a;2.多路…

企业应该先上ERP系统还是先实施MES管理系统

在当今日益激烈的市场竞争中&#xff0c;企业信息化已成为提升竞争力的关键。ERP系统与MES管理系统作为企业信息化建设的两大核心系统&#xff0c;各自扮演着不可或缺的角色。然而&#xff0c;在资源有限的情况下&#xff0c;企业往往需要在两者之间做出选择。本文将深入探讨ER…

跨境电商卖家入驻美国线下商超困难吗?

对于跨境电商卖家来说&#xff0c;入驻美国线下商超确实具有一定的挑战性&#xff0c;但并非不可能。成功的关键在于卖家是否具备必要的条件和资质&#xff0c;以及是否能够有效应对美国市场的挑战。 1、卖家需要满足美国相关法律法规的要求 需要拥有合法的经营执照、提供准确…

智能创作引领潮流,抓住时机!TikTok矩阵源码带来自动定时发布的成功策略

智能创作是当今社交媒体平台发展的重要趋势&#xff0c;而TikTok作为最受欢迎的短视频平台之一&#xff0c;通过其独特的创作方式和大量的用户&#xff0c;已经成为广告主和内容创作者的首选平台。在这个竞争激烈的市场&#xff0c;抓住时机并实现成功的关键是自动定时发布&…

人脑神经元与AI神经网络的奥秘

神经元是赋予我们思考力的生物学奇迹。大脑中藏着近千亿个这样的神经元&#xff0c;它们通过错综复杂的连接形成了我们的神经系统。每个神经元由细胞体、树突和轴突构成&#xff0c;这些部分使得神经元能够接收、处理和传递信息。 在人工智能领域&#xff0c;神经网络其实是模仿…

总费用大于20万患者详细信息

select t.住院号 病案号, t.入院日期, t.出院日期, b.名称 出院科室, (select x1.编码 from 病人诊断记录 x,疾病编码目录 x1 where x.疾病idx1.id and x.病人idt.病人id and x.主页idt.主页id and x.记录来源3 and x.诊断次序1 and x.编码序号1 …

Photoshop 2024 mac/win版:探索图像处理的全新境界

Photoshop 2024是Adobe推出的最新图像处理与设计软件&#xff0c;它在继承了前作所有优秀特性的基础上&#xff0c;实现了多个方面的质的飞跃。这款软件凭借其卓越的图像处理性能、丰富的创意工具以及精确的选区编辑功能&#xff0c;成为了图像处理领域的佼佼者。 Photoshop 2…

初始化三板斧 - centos7

1、关闭防火墙、关闭SELinux ① 立即关闭防火墙 systemctl stop firewalld ② 设置开机关闭防火墙 systemctl disable firewalld ③ 立即关闭SELinxu setenforce 0 ④ 设置开机关闭SELinux 将SELINUXenforcing 修改替换为 SELINUXdisabled vim /etc/selinux/config se…

adb shell pm path packageName

在Android命令行中&#xff0c;如果你想要查询某个应用程序的安装位置&#xff0c;可以使用pm命令&#xff08;Package Manager的缩写&#xff09;。这个命令提供了很多关于软件包管理的操作&#xff0c;查询应用安装路径&#xff0c;可以使用path选项。 具体命令如下&#xf…

Nginx+Tomcat负载均衡、动静分离群集方案

一、Tomcat简介 在现代 Web 服务架构中&#xff0c;Tomcat 和 Nginx 是两个至关重要的组件&#xff0c;负责处理用户请求并实现高性能的服务。本篇博客将深入探讨这些技术的原理和部署配置方法。 最初是由Sun的软件构架师詹姆斯邓肯戴维森开发。安装Tomcat后&#xff0c;安装…

立项 |上海城投《污染土壤修复工厂设计指南》

由上海城投上境生态修复科技有限公司提出申请 主要起草单位有上海城投上境生态修复科技有限公司、上海大学、中华环保联合会水环境治理专业委员会、中华环保联合会固危废及土壤污染治理专业委员会等单位 本指南规定了污染土壤修复工厂设计的技术要求。 本指南适用于国内污染土…

基于Matlab的纸币币值检测系统设计(GUI界面) 【含Matlab源码 MX_004期】

简介&#xff1a; 基于Matlab的纸币币值检测系统是一种利用数字图像处理技术来自动识别和鉴别纸币面额的系统。 图像获取&#xff1a;获取纸币的图像。 预处理&#xff1a;对获取到的图像进行预处理&#xff0c;包括去噪、灰度化、边缘检测等操作&#xff0c;以便后续的处理。…

哈尔滨等保测评驱动下的智慧城市建设思考

面对滚滚而来的大数据时代&#xff0c;信息安全等级保护测评&#xff08;简称等保测评&#xff09;对城市发展的推动作用不容忽视。作为黑龙江省的省会&#xff0c;哈尔滨在智慧城市建设上的积极探索和实践&#xff0c;必须以完善的等保测评体系为前提&#xff0c;确保信息的安…

算法day30

第一题 433. 最小基因变化 题型转化&#xff1a;可以转化为边权为一的最短路问题 将最开始的字符串定义为起点&#xff0c;我们将初识字符串每一个元素改变一次定义为移动一个位置&#xff0c;最后的字符串定义为中点&#xff0c;就这样每一次改变一个元素&#xff0c;最后成功…

小学生期刊知网//《小学生》评职称认可吗?

小学生期刊知网//《小学生》评职称认可吗&#xff1f; 【小学生】属于省级期刊&#xff0c;是正规的学术出版物。在教师评职称过程中&#xff0c;很多地方都认可。但具体的认可情况会因地区、学校以及职称评定的具体要求而有所不同。 主管单位&#xff1a;共青团山西省委员会和…

Lianwei 安全周报|2024.06.11

新的一周又开始了&#xff0c;以下是本周「Lianwei周报」&#xff0c;我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件&#xff0c;保证大家不错过本周的每一个重点&#xff01; 政策/标准/指南最新动态 01 新加坡发布《生成式人工智能治理模型框架》 该框…