 1e322d9f76
			
		
	
	
		1e322d9f76
		
	
	
	
	
		
			
			# Objective The pointer types introduced in #3001 are useful not just in `bevy_ecs`, but also in crates like `bevy_reflect` (#4475) or even outside of bevy. ## Solution Extract `Ptr<'a>`, `PtrMut<'a>`, `OwnedPtr<'a>`, `ThinSlicePtr<'a, T>` and `UnsafeCellDeref` from `bevy_ecs::ptr` into `bevy_ptr`. **Note:** `bevy_ecs` still reexports the `bevy_ptr` as `bevy_ecs::ptr` so that crates like `bevy_transform` can use the `Bundle` derive without needing to depend on `bevy_ptr` themselves.
		
			
				
	
	
		
			8 lines
		
	
	
		
			479 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			8 lines
		
	
	
		
			479 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # `bevy_ptr`
 | |
| 
 | |
| The `bevy_ptr` crate provides low-level abstractions for working with pointers in a more safe way than using rust's raw pointers.
 | |
| 
 | |
| Rust has lifetimed and typed references (`&'a T`), unlifetimed and typed references (`*const T`), but no lifetimed but untyped references.
 | |
| `bevy_ptr` adds them, called `Ptr<'a>`, `PtrMut<'a>` and `OwningPtr<'a>`.
 | |
| These types are lifetime-checked so can never lead to problems like use-after-frees and must always point to valid data.
 |