new is almost never used in modern C++.
That's not a "C++ serialization operator". In Bitcoin Core, data streams like CDataStream (vRecv there) overload the >> and << operators to do serialization. The actual serialization is mostly done by code in serialize.h via the ADD_SERIALIZE_METHODS and READWRITE macros used in each class that can be serialized.
So vRecv >> tx is actually vRecv.operator>>(tx), which ends up callings tx.SerializationOp(vRecv, ...), which applies the READWRITE macro to each serialized CTransaction field (plus maybe some other work), which either directly unserializes the value for simple types, or calls the value's SerializationOp method to do it.
The point of this somewhat complicated setup is that you just need to do vRecv >> tx to (securely) unserialize a whole transaction, and CTransaction only needs to have a few lines of code to make this happen.
Aha....thank you. That sets my mind in the right direction. Appreciate the detail.