Информация об изменениях

Сообщение Re[3]: Должен ли my::unique_ptr клонировать объект при копир от 20.12.2018 22:09

Изменено 20.12.2018 22:19 rg45

Re[3]: Должен ли my::unique_ptr клонировать объект при копировании
Здравствуйте, Went, Вы писали:

W>Ну, довольно таки надо. Название "уникальный" говорит только о том, что он уникально владеет своим объектом и копирование через клонирование объекта этот принцип не нарушает, ведь так?

W>А для чего это надо... Ну, допустим, наш объект реализован через систему компонент:
W>
W>class Car
W>{
W>  my::unique_ptr<Engine> engine; // Engine - базовый класс для разных видов моторов, и тут хранится один из них, понятное дело, уникальный для каждой машины

W>  // Плюс еще 100500 каких-то переменных-членов
W>}
W>

W>И, допустим, я хочу мочь копировать этот объект, размножать. Если использовать стандартный уникальный указатель, мне придется писать конструктор копирования и присваивания и следить за его адекватностью, добавляя все новые и новые поля и вызывая код клонирования для engine руками. А если я использую свой, с автоматическим клонированием, то, очевидно, мне будет достаточно автоматически сгенерированного.

В чем ты тогда сомневаешься, я не пойму. Если тебе рельно это нужно — вот это и есть ответ на твой вопрос.
Re[3]: Должен ли my::unique_ptr клонировать объект при копир
Здравствуйте, Went, Вы писали:

W>Ну, довольно таки надо. Название "уникальный" говорит только о том, что он уникально владеет своим объектом и копирование через клонирование объекта этот принцип не нарушает, ведь так?

W>А для чего это надо... Ну, допустим, наш объект реализован через систему компонент:
W>
W>class Car
W>{
W>  my::unique_ptr<Engine> engine; // Engine - базовый класс для разных видов моторов, и тут хранится один из них, понятное дело, уникальный для каждой машины

W>  // Плюс еще 100500 каких-то переменных-членов
W>}
W>

W>И, допустим, я хочу мочь копировать этот объект, размножать. Если использовать стандартный уникальный указатель, мне придется писать конструктор копирования и присваивания и следить за его адекватностью, добавляя все новые и новые поля и вызывая код клонирования для engine руками. А если я использую свой, с автоматическим клонированием, то, очевидно, мне будет достаточно автоматически сгенерированного.

В чем ты тогда сомневаешься, я не пойму. Если тебе рельно это нужно — вот это и есть ответ на твой вопрос.

К тому же такое специализированное владение может оказаться полезным для полиморфной реализации идиомы copy-on-write. Логически объекты как-бы разные, но, до тех пор, пока не было модификации можно совместно юзать одни и те же потроха. Причем, полиморфно.