Насколько это правильно?
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
к правильному указателю на объект родительского типа.