虽然搞IT10年中的前5年都是C/C++开发,刚开始看Doubango源码时还是让我郁闷不已,不过还好,渐渐适应了。刚开始最让我头疼的就是well-defined objects
由于Doubango是用纯C开发的,没有面向对象功能,就加上了这么一个东西。当然这套机制还是很不错的,毕竟纯C搞大型项目还是需要有些技巧的。
well-defined objects是用来模拟面向对象功能的,其中主要就是内存和指针的管理的,毕竟现实的malloc和free太容易出问题了。
源代码在tsk_object.c中:
先看一个结构体
typedef struct tsk_object_def_s
{
//! The size of the object.
tsk_size_t size;
//! Pointer to the constructor.
tsk_object_t* (* constructor) (tsk_object_t *, va_list *);
//! Pointer to the destructor.
tsk_object_t* (* destructor) (tsk_object_t *);
//! Pointer to the comparator.
int (* comparator) (const tsk_object_t *, const tsk_object_t *);
}
tsk_object_def_t;
这个定义了一个类对象的结构体,其中size是对象大小,constructor是对象构造函数,destructor是对象销毁函数,comparator是对象比较函数。
同java一样,