В отсутствие многопоточности реализация копирования при записи для shared_ptr (либо из boost, либо из tr1) с использованием unique() проста. Какие изменения необходимо внести при многопоточности? Счетчик ссылок является атомарным, поэтому я предполагаю, что могу создавать, копировать-конструировать, читать и уничтожать экземпляры shared_ptr без дальнейших проблем. Как насчет их обновления в целом и особенно при реализации копирования при записи? Нужны ли замки? Или использовать boost::atomic_store (почему это не задокументировано)? Или ждать полностью атомарную версию shared_ptr (не вариант)?
Редактировать:
sfossen, спасибо за ваш полезный ответ.
Итак, я заключаю, что если я изменяю объект, на который указывает, только после его отсоединения через COW, так что им владеет только текущий поток, блокировка не требуется и реализация COW выглядит точно так же, как однопоточная при использовании shared_ptr с атомарными счетчиками ссылок.