对于C/C++等命令式语言(相对于函数式语言)(二)
使用系统分配空间即可由object_new一次完成二、三两步。
//用户分配
struct klass XXXClasss;
void* ptr = malloc(XXXClass.object_size);
object_new_at(ptr, &XXXClass);
//系统分配
struct object* ptr = object_new(&XXXClass);
在对象初始化过程中,object_new会调用构造函数,也就是kclass中的init函数,相应的destructor/copy等函数也会在对应的object_destroy/object_copy过程中调用。
以上基本构造了一个简单的对象系统核心,我们如果再补充一些错误处理、内存管理以及多线程处理,一个小型而完整的对象系统就构造出来了,但它最大问题还是语法复杂度比较高。虽然我们可以使用宏来优化语法,但效果不如人意,同时还带来了理解上的困难。
在一些简单的应用中,并不需要这样一个复杂而完整的对象系统,我们更简单的抽象甚至更好一点。一个对象可以表示如下,vtable可以指向一个函数如f(void* data);
struct object {
void* vtable;
void* data;
};
构造和析构函数都专用函数XXX_new和XXX_destroy即可。