A void * points into memory of unknown size because it has no type. In order to perform a delete (or do anything, really) the compiler must know the type to which a pointer is pointing.