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

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

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

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

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


AG>Думаю, лучше не называть это unique_ptr. Из-за стандартизированного неклонирующего unique_ptr, клонирующий кастомный unique_ptr будет сюрпризом, даже несмотря на то, что уникальность владения соблюдается.


Признаться, не вижу я здесь никакого сюрприза. Чего еще можно ожидать от unique_ptr, допускающего копирование?

Для пущей надежности его можно определить как-то так:


template <typename, typename = void>
class UniquePtr;

template <typename T>
class UniquePtr<typename T, std::enable_if_t<IsCloneable<T>::value>>
{
// . . .
};
Re[4]: Должен ли my::unique_ptr клонировать объект при копир
Здравствуйте, Alexander G, Вы писали:

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


AG>Думаю, лучше не называть это unique_ptr. Из-за стандартизированного неклонирующего unique_ptr, клонирующий кастомный unique_ptr будет сюрпризом, даже несмотря на то, что уникальность владения соблюдается.


Признаться, не вижу я здесь никакого сюрприза. Чего еще можно ожидать от unique_ptr, допускающего копирование?

Для пущей надежности его можно определить как-то так:


template <typename, typename = void>
class UniquePtr;

template <typename T>
class UniquePtr<typename T, std::enable_if_t<IsCloneable<T>::value>>
{
// . . .
};


Причем, ИМХО, слово "unique" является ключевым для описания семантики, поэтому я бы даже не искал ему замену. Просто unique, допускающий копирование — и этим все сказано, по-моему.