Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct PtrWrapper<'a> {
- ptr: u64,
- callback: Box<Fn(&'a PtrWrapper<'a>)>,
- }
- impl<'a> PtrWrapper<'a> {
- pub fn from(ptr: u64) -> Self {
- let cb = move |pw: &PtrWrapper| {
- println!("raw pointer: 0x{:x}", pw.ptr);
- };
- PtrWrapper {
- ptr: ptr,
- callback: Box::new(cb),
- }
- }
- }
- fn main() {
- let pw = PtrWrapper::from(1); // let's call its lifetime 'a
- {
- let pw2 = PtrWrapper::from(2); // and this one 'b
- (pw2.callback)(&pw);
- // ↑ borrows for 'a because Box<Fn(&'a PtrWrapper<'a>)>
- // these two are equal ↑ ↑
- // which means pw2.callback must live for at least 'a
- }
- (pw.callback)(&pw);
- // same here pw.callback must live for at least as long as pw
- // but pw.callback is dropped before
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement