I was surprised that I didn't see this when I tested concurrent validation. But a quick review shows that transactions are queried, populated, validated, and destroyed on a single thread. Only integral values and a single racer object are passed around. One racer per block is a trivial object destruction, so inconsequential. In other words, through a coincidence of design, so far, object allocation and destruction has been very efficient. So we've got to handle this if we want block/tx/prevout caching for validation, but it also presents unforeseen optimization opportunities.