We will go through a detailed explanation of what type erasure is and how it is accomplished in C++. But first, let's see what a program that had the explicit type information removed from it looks like.
We start with a very simple example of using a unique pointer, std::unique_ptr:
std::unique_ptr<int> p(new int(0));
This is an owning pointer (see Chapter 3, Memory Ownership)—the entity containing this pointer, such as an object or a functional scope, also controls the lifetime of the integer we allocated, and is responsible for its deletion. The deletion is not explicitly visible in the code and will happen when the p pointer is deleted (for example, when it goes out of scope). The way this deletion will be accomplished ...