Move Semantics in Modern C++
Move semantics allows an object, under certain conditions, to take ownership of other object's external (heap) resources. This helps turning expensive copies into cheap moves.
Smart Pointers in Modern C++
Smart pointers can do virtually everything raw pointers can, but with far fewer opportunities for error.