本次更新的内部版本为2.4.43
。
本次更新并不会发布2.4.43
。
随着接口原型的变动,部分文档也受到了变动。
部分代码经过了微调,提升了可读性(例如SFN.cpp
)
我将智能指针的实现也加入到了依赖库接口当中。
智能指针位于EasySmartPtr.hpp
,正如文件名所描述的一样,EasySmartPtr旨在创建一个易实现,简单,实用的智能指针库。
该智能指针的标准C实现采用的是引用计数法,因此无法处理循环引用链,所以请在编写代码时注意不要将EasySmartPtr应用于循环引用链上。
为了解决“如何让智能指针在不同场景使用不同销毁方式”这一问题,我将销毁函数抽象成了销毁函数指针。除非特殊指定销毁函数,EasySmartPtr默认直接delete指针。销毁函数的原型应该是:
void destroy_function(EasySmartPtr<T>* p);
EasySmartPtr的基本用法是: *
EasySmartPtr(T *pointer)
:新建一个智能指针,pointer为受托管的指针,销毁方式默认为delete
*
EasySmartPtr(T *pointer, void (*destroy_funcptr)(EasySmartPtr<T> *ptr))
:新建一个智能指针,pointer为受托管的指针,销毁方式为给定的函数指针destroy_funcptr
*
T *get()
:获取受托管的指针,我们建议只对该指针进行简单的读写,否则可能会出现该指针已被销毁但程序还在保存并使用该指针的情况。因此请记得用EasySmartPtr来传递该指针
*
ptr->member
:EasySmartPtr也支持直接获取成员。其中ptr为EasySmartPtr,member为成员标识符。该代码的效果和直接访问裸指针的成员的效果是等价的。
本次更新着重修复运行端的内存漏洞。
我修复了AstRunner最为重要的“产生Variable堆对象但无法删除”的漏洞。我引用了智能指针来修复他。 我修复了“抽象语法树在被创建后无法被删除”的漏洞,我使用了递归析构的方式来修复他。 我修复了“复杂数据结构的datatype::DataType*在被删除后无法彻底清除内存”的漏洞,我使用了重载虚析构函数的方式来修复他。
还有一些细枝末节的,显然的内存泄漏也被我修复了。
TokenFileWriter
和TokenFileReader
进行调试