关于空间分配器和对象构造器
在C++使用new去创建一个对象,其实应该分为两个步骤,第一步是申请空间,第二步是构造对象。同样,使用delete去销毁一个对象,也应分为两步:析构对象,释放空间。在GNova中,为了灵活操作,将这两个步骤分开处理,分别命名为空间分配器和对象构造器。
内存处理函数
在C中可以使用malloc和free来申请与释放堆内存,在GNova中封装了相应的方法,位于文件gmemory.h中,包括以下函数:
1 gpointer GMalloc(gsize size); 2 gpointer GCalloc(gsize n, gsize size); 3 gpointer GRealloc(gpointer oldptr, gsize newsize); 4 gvoid GFree(gpointer pfree);
这些与C函数命名基本一致的函数,其功能也保持一致。
此外,在gmemory.h还封装了一些内存操作的方法:
1 gpointer GMemCopy(gvoid *dst, const gvoid *src, gsize size); 2 gpointer GMemMove(gvoid *dst, const gvoid *src, gsize size); 3 gpointer GMemSet(gvoid *dst, gbyte value, gsize size);
这些函数也与命名基本一致的C函数在功能上保持一致。
空间分配器
空间分配器用于申请和释放空间,位于文件gallocator.h中。这里的空间本应指广义的空间,既可以指内存,也可以在磁盘中开辟空间。但在GNova中仅实现了内存空间版本。
1 template <typename ClassT> 2 ClassT *GAllocate(gsize n = 1) noexcept(false); 3 4 template <typename ClassT> 5 gvoid GDeallocate(ClassT *ptr) noexcept; 6 7 template <typename ClassT> 8 ClassT *GReallocate(ClassT *oldptr, gsize newsize) noexcept(false);
对象构造器
对象构造器用于构造和析构对象,位于文件gconstructor.h中。
1 template <typename ClassT> 2 gvoid GConstruct(ClassT *ptr); 3 4 template <typename ClassT> 5 gvoid GConstruct(ClassT *ptr, const ClassT ©able); 6 7 template <typename ClassT> 8 gvoid GConstruct(ClassT *ptr, ClassT &&moveable); 9 10 template <typename ClassT> 11 gvoid GDestruct(ClassT *ptr);
浙公网安备 33010602011771号