Насколько это правильно?
SocketOutputStream не собирает твои данные в единый бинарный буфер, а сразу пишет их в сокет. Это дает волю кому угодно вклиниться из другого потока в этот сокет между операциями записи в твоем текущем потоке. Т.е. транзакция записи сообщения может быть легко нарушена.flush при этом - это барьер синхронизации между исполнением твоего кода и очисткой конвейера операций устройства (в самом устройстве). В случае блокируемых сокетов flush - фиктивная штука.SocketOutputStream. Т.е. передавай на запись в сокет не сообщение, а буфер, куда сообщение сериализовано.std::vector<int>{10}: вектор с одним элементом или с десятью?vector<int> arr(10)?Stack? apply) или, что ближе всего, операция переопределения - override.class OverrideableInt, поле overrideValue является приватным. Значит тебе не просто саму stealDataFrom надо написать, но еще и объявление дружественности написать.OverrideableXYN у тебя много, они все разные и являются составными частями модели записи в базе. Потом ты хочешь из одной записи в базе перетянуть только оверрайды значений.steal выполнять через визитера по двум спискам. Вроде такого.dest_record.Visit( source_record, ApplyOverriddenValue );from в to последний не будет идентичен?steal. :)steal ничего не крадет, то это уже очень странно.
reinterpret_cast. Это выстрел себе в ногу.reinterpret_castработает очень коварно:Теперь, если твой тип является полиморфным, тем более если наследование множественное или виртуальное, ты в этом месте получаешь ремаппинг памяти, нарушение инварианта, ложную виртуальную таблицу и еще целый ворох тараканов, которые разбегутся по всей памяти процесса, куда нерадивое исполнение такой машины смерти только сможет дотянуться.
static_cast- этого тут достаточно для работы. Этот каст приведетthisк правильному указателю на объект родительского типа.