It would be simpler if so was a contained member (with no new/delete) instead of a pointer.