In the FWIW department I reconstructed this so that the address of the pointer to the main thread's copy of the QImage is passed into the thread, and it updates the pointer directly.

Doing it that way, I am able to delete against this pointer without crashing, and many thousands of iterations does not show any memory growth.

Maybe that's the proper way, though that doesn't explain the official (?) example doing it this way, unless I did not copy it correctly.