请教一个源码上面的问题

ObjectPool 对象到底是怎么使用的,看源码的时候有点懵
只找到add的地方,使用的时候是怎么用的呢
将解析的gql语句按照类型创建表达式放进里面,然后如何区分各自表达式隶属于那些语句的对象里面?
sentence expression之间的关系是什么呀?
希望得到开发大佬的指点。目前希望完整的看看查询引擎的基本实现。提前谢过啦。

你主要使用什么开发语言呢

开发用java,公司还在调研图数据库,目前还没有到需要应用工程的阶段,主要是对源码的实现比较好奇,所以就本地编译读了一下。对其中的部分逻辑不是很清楚,所以特来请教。

开发用java,对C++的阅读可能会有些吃力,但好在nebula的代码整体上还是很清晰的,之前官方发布的一些博客也有仔细的读过几遍,就是这个Gql语句的解析和封装一直没看的很明白,可能是编译自动生成的原因吧。Sentence的子类感觉好像已经包含了ObjectPool里面的内容了,不知道单独设计这个ObjectPool的目的是什么?

:thinking: 你可以先阅读下我们的源码阅读系列的文章 https://nebula-graph.com.cn/tags/源码解读/

已经读过很多遍了,文章粒度较粗,细节还是不是很明白

ObjectPool是用来管理expression相关的指针指向的内存生命周期的, new一些expression后, 直接将其指针加入objectPool, 在query结束后, objectPool会析构, 它所管理的内存就释放了.
C++没有GC, 所以要么用智能指针管理内存, 要么用objectPool这种方式管理内存

4 个赞

明白了,多谢,是不是也可以这么理解,我在看源码的时候可以不必关注ObjectPool。这些数据在expression和sentence也有保存呢。

是的, 不用关心内存管理相关的东西

多谢多谢,总算解决了我这么久的疑惑了。

:grinning: :grinning:

如果你觉得 jievince 的回复解决了你的问题的话,可以勾选为解决方案,方便后续遇到相似问题的小伙伴也可以快速找到答案哈~ 谢谢 hd506

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。