何时不使用RAII进行资源管理

IUn*_*ter 6 c++ raii resource-management

任何人都可以向我提供一个或多个具体的例子,其中RAII 不是最有效的资源管理方法,为什么?

jk.*_*jk. 0

GC 可以为程序员处理循环数据结构的内存,而 RAII 则需要程序员在某处手动中断循环。

  • 另请注意,RAII 和周期问题是不相关的问题。循环问题与引用计数有关,这只是可能的 RAII 策略之一。您可以持有一个具有前向“shared_ptr”和后向“weak_ptr”的双链表,并且您都将使用 RAII 并且不会遇到循环问题。 (3认同)
  • 你能举个例子吗? (2认同)
  • 无论周期如何,识别内存中的哪些对象是垃圾相对容易。在存在循环的情况下确定有效的销毁顺序很困难。GC 语言通过“不”解决这个问题来解决这个问题 - 它们声明终结器不保证运行,因此涉及内存以外的资源的清理必须手动处理,这意味着您遇到的问题与以下问题具有相同的生命周期管理形式: GC 应该可以修复。不过,这是一个很好的答案 - 如果唯一需要管理的重要资源是内存,则 GC 比 RAII 更好,这并不罕见。 (2认同)
  • 正如 @David 所说,RAII 不仅仅是引用计数。共享指针被过度使用了。它们不应该是默认选择。 (2认同)