Your problem is that you're trying to recursively handle intertwined relationships. When a Husband has a Wife, and both delete the other, you're bound to get stuck in recursive hell of course.
Instead, keep the references as pointers, and do not delete any of them in the destructor - it's simply not the responsibility of the class. Imagine when a real life husband dies, does his wife also die automatically?
Just keep a separate std::vector
of Person
instances as the 'master catalogue' of people in your 'world', and let them reference eachother lazily through their relationships. Puts all the deletion misery in one extremely non-recursive place, and solves all issues.