关于空间分配器和对象构造器

在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 &copyable);
 6 
 7 template <typename ClassT>
 8 gvoid GConstruct(ClassT *ptr, ClassT &&moveable);
 9 
10 template <typename ClassT> 
11 gvoid GDestruct(ClassT *ptr);

 

posted on 2017-02-16 14:11  乱世浮生  阅读(191)  评论(0)    收藏  举报

导航