Later in the book, we introduce dynamic memory management with pointers, which allows you at execution time to create and destroy objects as needed. Improperly managing this process is a source of subtle errors. We’ll discuss “smart pointers,” which help you avoid dynamic memory management errors by providing additional functionality beyond that of built-in pointers.