My original code used a new and passed the pointer around, but had a bunch of work for no reason. My new "simplified" code only did the single allocation, didn't copy anything around, so was bug free by accident.
I would have noticed the accidental destroy since I was printing a message when called, trying to understand it. But again, pure luck.
I've got the 3rd edition of the C++ Programming Language that I've been reading, but it is slow going.
And 'ctor'? That took a bit of googling to figure out it was shorthand for constructor. You must be used to it.