Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.85 KB | None | 0 0
  1. struct PtrWrapper<'a> {
  2. ptr: u64,
  3. callback: Box<Fn(&'a PtrWrapper<'a>)>,
  4. }
  5.  
  6. impl<'a> PtrWrapper<'a> {
  7. pub fn from(ptr: u64) -> Self {
  8. let cb = move |pw: &PtrWrapper| {
  9. println!("raw pointer: 0x{:x}", pw.ptr);
  10. };
  11. PtrWrapper {
  12. ptr: ptr,
  13. callback: Box::new(cb),
  14. }
  15. }
  16. }
  17.  
  18. fn main() {
  19. let pw = PtrWrapper::from(1); // let's call its lifetime 'a
  20. {
  21. let pw2 = PtrWrapper::from(2); // and this one 'b
  22. (pw2.callback)(&pw);
  23. // ↑ borrows for 'a because Box<Fn(&'a PtrWrapper<'a>)>
  24. // these two are equal ↑ ↑
  25. // which means pw2.callback must live for at least 'a
  26. }
  27. (pw.callback)(&pw);
  28. // same here pw.callback must live for at least as long as pw
  29. // but pw.callback is dropped before
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement