gobject base class

本文详细介绍了 GObject 的初始化和析构过程,包括初始化阶段的目标类型构造、接口初始化等关键步骤,以及析构阶段的处置和最终化操作。通过理解这些过程,开发者可以更好地管理 GObject 实例的生命周期。

1. 初始化总结

Invocation time Function Invoked Function's parameters Remark
First call tog_object_newfor target type target type's base_init function On the inheritance tree of classes from fundamental type to target type. base_init is invoked once for each class structure. I have no real idea on how this can be used. If you have a good real-life example of how a class' base_init can be used, please, let me know.
target type's class_init function On target type's class structure Here, you should make sure to initialize or override class methods (that is, assign to each class' method its function pointer) and create the signals and the properties associated to your object.
interface' base_init function On interface' vtable  
interface' interface_init function On interface' vtable  
Each call tog_object_newfor target type target type's class constructor method: GObjectClass->constructor On object's instance If you need to complete the object initialization after all the construction properties are set, override the constructor method and make sure to chain up to the object's parent class before doing your own initialization. In doubt, do not override the constructor method.
type's instance_init function On the inheritance tree of classes from fundamental type to target type. the instance_init provided for each type is invoked once for each instance structure. Provide an instance_init function to initialize your object before its construction properties are set. This is the preferred way to initialize a GObject instance. This function is equivalent to C++ constructors.

2. Readers should feel concerned about one little twist in the order in which functions are invoked: while, technically, the class' constructor method is called before the GType's instance_init function (since g_type_create_instance which calls instance_init is called by g_object_constructor which is the top-level class constructor method and to which users are expected to chain to), the user's code which runs in a user-provided constructor will always run after GType's instance_init function since the user-provided constructor must (you've been warned) chain up before doing anything useful.

3. gobject 析构

Invocation time Function Invoked Function's parameters Remark
Last call tog_object_unreffor an instance of target type target type's dispose class function GObject instance When dispose ends, the object should not hold any reference to any other member object. The object is also expected to be able to answer client method invocations (with possibly an error code but no memory violation) until finalize is executed. dispose can be executed more than once. dispose should chain up to its parent implementation just before returning to the caller.
target type's finalize class function GObject instance Finalize is expected to complete the destruction process initiated by dispose. It should complete the object's destruction. finalize will be executed only once. finalize should chain up to its parent implementation just before returning to the caller. The reason why the destruction process is split is two different phases is explained in the section called “Reference counts and cycles”.
Last call tog_object_unreffor the last instance of target type interface' interface_finalize function On interface' vtable Never used in practice. Unlikely you will need it.
interface' base_finalize function On interface' vtable Never used in practice. Unlikely you will need it.
target type's class_finalize function On target type's class structure Never used in practice. Unlikely you will need it.
type's base_finalize function On the inheritance tree of classes from fundamental type to target type. base_init is invoked once for each class structure. Never used in practice. Unlikely you will need it.


Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
sh-3.2# gst-inspect-1.0 -b (gst-plugin-scanner:5027): GStreamer-WARNING **: 19:43:08.929: Failed to load plugin '/usr/lib64/gstreamer-1.0/libgstffmpeg.so': /usr/lib64/gstreamer-1.0/libgstffmpeg.so: undefined symbol: get_primary_transferfunc size of instance = 1624 size of class = 1848 size of basesrc = 648 size of basesrcclass = 824 (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.642: cannot register existing type 'GstTypeSMVideoEnc' (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.643: g_param_spec_enum: assertion 'G_TYPE_IS_ENUM (enum_type)' failed (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.643: validate_pspec_to_install: assertion 'G_IS_PARAM_SPEC (pspec)' failed (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.643: g_param_spec_ref_sink: assertion 'G_IS_PARAM_SPEC (pspec)' failed (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.643: g_param_spec_unref: assertion 'G_IS_PARAM_SPEC (pspec)' failed (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.643: cannot register existing type 'GstTypeSMVideoEncDRM' (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.643: g_param_spec_enum: assertion 'G_TYPE_IS_ENUM (enum_type)' failed (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.643: validate_pspec_to_install: assertion 'G_IS_PARAM_SPEC (pspec)' failed (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.643: g_param_spec_ref_sink: assertion 'G_IS_PARAM_SPEC (pspec)' failed (gst-plugin-scanner:5027): GLib-GObject-CRITICAL **: 19:43:09.643: g_param_spec_unref: assertion 'G_IS_PARAM_SPEC (pspec)' failed Blacklisted files: libgstffmpeg.so Total count: 1 blacklisted file
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值