What Are Smart Pointers in C++ and When Should You Use Them? | CodeTrail