У меня проблема больше с сериализацией. Сейчас он сделана очень просто и id туда не вписывается.
Так впишите первой строкой во все операторы << >>
Я бы использовал какой-нибудь сингелтон, тип CIdManager c методами find, getId, и т.д.
Я дал "колхозное" имя чтобы избежать вопросов типа "а в какой библиотеке CIdManager?
Само собой конструктор копирования и оператор присваивания должны быть перекрыты для базового класса с тем чтобы новое ID создавалось - оно никогда не должно копироваться