主要观点:
__attribute__((cleanup(...)))
在clang中受支持,可用于管理内存等资源,但没人谈论,Linux 人甚至尝试用 Rust 保证内存安全,引发疑问为何不先试试该特性。- 有人认为使用该特性多年后发现 RAII 更好,且编写 C 代码时记得添加清理属性较麻烦,不如直接用 C++。
- 自动清理虽好但内存安全不止于此,Rust 安全保证不包括不泄露内存。
- 该特性是非标准属性,跨编译器移植性差,虽在 Linux 内核中使用但并非广泛使用。
- 规则五/三虽需编写一些代码但并非增加大量 boilerplate,需明确是否偏离默认行为。
- 在较大 C++项目中使用非标准
scope_guard
进行资源清理比组合式 RAII 更易出错且难维护。 __attribute__((cleanup))
存在局限性,如仅适用于特定分配方式,无法处理函数失败和成功时的不同清理需求等,且不支持 MSVC,在 Linux 内核中使用也有不便。- 有人使用该特性,认为其能减少 C 中早期返回的风险,希望其能成为标准。
- 认为 Linux 人尝试 Rust 更多是出于政治原因,而非单纯为了内存安全,Rust 在处理资源管理方面更全面可靠。
关键信息:
- 示例代码展示了
defer
宏和freep
函数的使用。 - 不同人对
__attribute__((cleanup(...)))
的看法和经验,包括其优点(如局部锁定)、缺点(如代码冗余、跨编译器问题等)。 - 与 C++的 RAII 进行比较,讨论两者的优缺点。
重要细节:
- 多个评论者提及在不同情况下使用
__attribute__((cleanup(...)))
的注意事项和局限性。 - 讨论了在不同编译器(如 MSVC)中的支持情况。
- 提到 Linux 内核中对该特性的使用及相关讨论。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。