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
ничего не крадет, то это уже очень странно. stealDataFrom
у тебя ничего не steal
, т.к. он вызывает оператор копирования.OverrideableInt& OverrideableInt::operator = ( OverrideableInt&& right )
), то это был бы именно steal
. Но и в таком случае steal
лучше заменить на move
чтобы не грузить пользователей твоего кода синонимами.
Зависит от того, какую задачу ты решаешь.
Я скажу - все это неправильно. Самая частая ошибка человека в том, что он описывает не саму проблему, а то, как он эту неописанную проблему хочет решать.
Я пока еще не понимаю что ты хочешь сделать, сейчас еще рано говорить о том, как ты хочешь это сделать.