I can't see what problem should be when PARENT material gets destroyed.
I have a solid copy of that. IMHO the new one isn't child, just another another, independent material.
And how could be memory leak happen?
To answer both questions at once: You are doing a shallow copy, so you just copy the values of pointers instead of doing a deep copy with everything. If the parent material gets removed, your copy material suddenly has lots of dangling pointers...
Oh and you leak the memory that was allocated for your material, but you threw away while doing the copy.