A virtual destructor lets polymorphic deletion through a base-class pointer call the derived-class destructor first, followed by the base-class destructor. Without it, deleting a derived object through a base pointer has undefined behavior. section 6.1.1
Safe cleanup for race blobs
A Blob base class can declare `virtual ~Blob() = default;`. Then `Blob* blob = new DerivedBlob(); delete blob;` performs the complete destruction sequence. The same declaration supports a hierarchy of blob types while retaining a base-class pointer interface. section 6.1.1

