3 types: unique_ptr, shared_ptr, weak_ptr

shared ptr is thread safe…

weak ptr

non-owning pointer

useful when caching…

Custom deleter

specify a functor to handle special things when deallocate object…

Aliasing constructor

In shared_ptr, when need to share the lifetime of a subobject…

pitfalls

double managing the same object… solution: use make_shared(), make_unique() instead