Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.57 KB | None | 0 0
  1. use std::rc::Rc;
  2. use std::cell::RefCell;
  3.  
  4. type NodePtr<T> = Option<Rc<RefCell<Node<T>>>>;
  5. struct Node<T> {
  6. val: T,
  7. next: NodePtr<T>,
  8. }
  9.  
  10. impl<T> Drop for Node<T> {
  11. fn drop(&mut self) {
  12. println!("dropping");
  13. }
  14. }
  15.  
  16. fn main() {
  17. let head = Rc::new(RefCell::new(Node {
  18. val: 10, next: None,
  19. }));
  20. let tail = Rc::new(RefCell::new(Node {
  21. val: 20, next: None,
  22. }));
  23. // mem leak caused by circular reference, same problem as shared_ptr in C++
  24. head.borrow_mut().next = Some(tail.clone());
  25. tail.borrow_mut().next = Some(head.clone());
  26. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement