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
TODO
Rc
TODO
Arc
TODO
RefCell
TODO
Cell
TODO
Mutex
TODO
RwLock
TODO
Cow
TODO
Weak
TODO
Pin
TODO