更好的内存管理
Better memory management in bison
Bison默认使用union来存储语义类型值。由于union除了指针、原语、数组和普通的旧数据之外不支持其他字段,所以我最终使用了指向shared_ptrs的原始指针,我必须手动释放它们…
虽然它工作,它是丑陋的,容易出错,我想用更好的东西来代替它。这里建议我可以使用YYSTYPE
宏来提供我自己的语义类型,这将取代联合。但是建议的替换对我来说太啰嗦了。
是否有一些例子或参考页或任何其他建议,将帮助我写更安全的野牛解析器?我不考虑切换到其他解析器生成器。
我使用的一种技术是#define YYSTYPE std::shared_ptr<Object>
,其中Object
是一个抽象基类,具有虚拟析构函数和大量虚拟函数,用于完成对象的所有不同子类所需的所有事情。这有一些讨厌的"代码气味",因为你有效地将对象指针向下转换为派生类指针。
只是使用原始指针并确保正确清理并不难-每个动作都需要确保它清理由它直接使用的规则分配的所有指针(通过显式调用delete或通过将它们复制到$$
以便拥有它们),但由于动作通常很小(它们大多只是调用其他函数),这并不太难。然后,您只需使用%destructor
声明来确保正确清除错误后丢弃的内容。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 可以通过非原始指针来增强容器矢量管理内存
- 如何使用 std::vector<std::tuple<A,B>> 来管理内存(调整大小、保留,...),但实际上将 As 保留在 B 之前,连续
- 线程管理内存泄漏
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 管理内存C++
- ptr_vector如何管理内存
- 在C++Builder/Firemonkey中使用表单创建来管理内存
- 如何正确管理内存(运行时)C++
- 在Node.js中使用Native Abstractions时,如何管理内存
- ostream是如何管理内存的
- C++中管理内存泄漏的问题
- OpenCL:在 CPU 上而不是在 GPU 上更正结果:如何正确管理内存
- deque是如何管理内存的
- 用c++/cli互操作管理内存
- 如何衡量管理内存所花费的时间
- (加速C++)章节管理内存
- 如何在此场景中管理内存