Smart Pointers
Smart Pointers are references to data, so you can use it, without taking ownership of this data. But before talking about Smart Pointers, lets take a look at normal references.
Normal references
You can create references to variables. This gives code the ability to work with those variables, without taking the ownership.
Reference
TODO
Mutable Reference
TODO
Smart Pointers
Smart Pointers are often required, because they give you additional functionalities, where normal references do not fit the problem.
Box
TODOVariables are usually stored in the stack. But sometimes you need to store data on the heap memory. A good example is, when the size of the data struct can not be calculated on compile time. The Box smart pointer is basically a pointer to the struct on the heap.
let pointer = Box::new(5);
Rc
TODO
Arc
TODO
RefCell
TODO
Cell
TODO
Mutex
TODO
RwLock
TODO
Cow
TODO
Weak
TODO
Pin
TODO