1/6

Reference counting has one classic failure: a cycle. If A owns B and B owns A, neither count ever reaches zero and the memory is never freed. Rust does not prevent this — it is a leak, not unsoundness, and the borrow checker has nothing to say about it.

The standard shape where this appears is a tree with parent links:

root.children  ->  Rc<Node>   (strong)
leaf.parent    ->  Rc<Node>   (strong)  // cycle: nothing is ever freed