Повышение shared_ptr: использование unique () для реализации копирования при записи - PullRequest
3 голосов
/ 15 апреля 2011

Может ли кто-нибудь объяснить, что означает в надстройке shared_ptr руководство :

Если вы используете unique () для реализации копирования при записи, не полагайтесь на конкретное значение, когдасохраненный указатель равен нулю.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 15 апреля 2011

Копирование при записи - это схема хранения, в которой копии объекта с дублирующимися значениями представлены одним объектом.Только когда вы пытаетесь изменить его, он копируется в новый уникальный объект.

Boost поддерживает это, сообщая вам, поддерживает ли данный shared_ptr более одной ссылки.Если это так, то запись в объект потребует создания копии.

В руководстве говорится, что если в такой схеме есть указатели NULL, они могут сообщить, что они уникальны или нет.Действительно, Boost щедр, даже если разрешить такую ​​операцию.

3 голосов
/ 15 апреля 2011

По сути, это означает, что если у вас есть shared_ptr, который ни на что не указывает, он может или не может сказать, что он уникален. Тем не менее, вы должны знать, что COW был исключен почти всеми основными строковыми библиотеками и запрещен для C ++ 0x, потому что в основном это отстой, поэтому вы должны быть осторожны с этим.

...