具体也说不清为什么,一直对C++语言很着迷,即使现在很少使用。做应用系统,讲究的是RAD,不是用Java平台就是.Net平台。C++已经退居幕后,用来做那些高效的,安全的,或需要更强控制功能的程序,比如底层的引擎,硬件相关的或平台级的程序。就像很多已经消失的东西,有一天C++也会消失(我会伤心的)。
C++在堆上分配的内存是由开发者自己控制的,对于复杂逻辑或者应用一些模式时,内存管理可能会变的很复杂。我们可以开发一个通用的C++内存管理框架,能自动或半自动的管理堆分配。力争实现,在内存管理方面,能以接近.Net或Java的方式开发,而仍然是以本地二进制代码运行。当然,这必然会牺牲一些运行时的时间和空间效率,但如果能自动管理堆分配,这点牺牲是非常值得的,对于现在的大多数C++开发都是可以接受的。何况,我们可以实现,当开发者分配内存时可以选择使用普通的堆,还是使用受管理的堆(我们不应该丧失C++的灵活性)。这一点类似于.Net的Managed C++,但不同的是我们要编译为本地二进制代码。这种想法,我是从Symbian操作系统的C++语言来的。如果可能,现在应该已经存在一些这样的C++框架了,但我没有搜索过。
Symbian操作系统中C++语言,其内存堆可以说实现了半托管。开发者在堆上建立了对象,然后可以选择将此信息推入到一个全局的管理器中。当对象不再使用时,开发者可以选择自己销毁对象,也可以调用全局管理器的清除函数。当程序结束或发生意外时,会自动清除管理器中受管理的对象。Java和.Net平台对内存堆的管理其实也是这个基本原理,只是实现的更完全,能定期自动清除不再使用的对象。
这个框架的开发当然不会太容易。首先,要自己构建并维护一个内存堆结构,并需要设计一些结构和方法,来管理这个堆上的内存分配信息。并可以采用一些方法对堆的效率进行优化,比如使用堆指针,保持内存分配的连续性。在语言方面,可以由重载运算符,使用宏等方式来实现,甚至,可以写一个预处理器,先对代码增加一些特殊的预处理,比如参数传递,函数返回值等机制,然后对预处理器生成的代码再由C++编译器编译。这种处理也是一种比较普通的方法,有的C++编译器,其实就是一个预处理器加一个C编译器。但这样有将C++变成另外一种语言的嫌疑,呵呵。