Re[17]: C++11 'new' и 'delete' устарели ?
От: night beast СССР  
Дата: 16.01.14 16:19
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>
EP>std::vector<std::unique_ptr<X, Deleter>> c;
EP>


так каждый может. это не интересно.

EP>>>если stateful — то естественно повлияет.

EP>>>Но если у тебя stateful deleter — тебе его пришлось бы таскать вместе с указателем и без unique_ptr. То есть unique_ptr никакого нового оверхеда тут не добавляет.
NB>>дык о том и речь. он stateful, но в пределах вектора/класса/группы объектов.
NB>>допустим, в класс передается аллокатор, а в делетере хранится указатель на него.
NB>>естественно, таскать его с каждым элементом вектора -- лишний оверхед.

EP>Да, в этом случае будет overhead. Но это не wrapping penalty, а penalty за лишние и неиспользуемые возможности(например move отдельного элемента вектора наружу). Для таких случаев можно использовать что-то типа boost::ptr_vector.


все верно. только ptr_vector в стандарт не входит. свои поделки применяем...
просто просили продемонстрировать пример именно для unique_ptr.
Re[18]: C++11 'new' и 'delete' устарели ?
От: Evgeny.Panasyuk Россия  
Дата: 16.01.14 16:42
Оценка:
Здравствуйте, night beast, Вы писали:

EP>>Да, в этом случае будет overhead. Но это не wrapping penalty, а penalty за лишние и неиспользуемые возможности(например move отдельного элемента вектора наружу). Для таких случаев можно использовать что-то типа boost::ptr_vector.

NB>все верно. только ptr_vector в стандарт не входит. свои поделки применяем...
NB>просто просили продемонстрировать пример именно для unique_ptr.

Я думаю изначально речь всё же шла про wrapping penalty. Случаи overkill'а можно продемонстрировать практически для чего угодно, например:
auto x = make_unique<Foo>(1);
// vs
Foo x{1};
Re[19]: C++11 'new' и 'delete' устарели ?
От: night beast СССР  
Дата: 16.01.14 17:49
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

NB>>просто просили продемонстрировать пример именно для unique_ptr.


EP>Я думаю изначально речь всё же шла про wrapping penalty.


wrapping penalty можно получить если у нас не один, а два разных делетера.
или один делетер и один еще что-нибудь (или два что-нибудь)
Re[19]: C++11 'new' и 'delete' устарели ?
От: tstalker Украина  
Дата: 26.02.14 12:40
Оценка: -1 :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Случаи overkill'а можно продемонстрировать практически для чего угодно, например:

EP>
EP>auto x = make_unique<Foo>(1);
EP>// vs
EP>Foo x{1};
EP>


В стандарте C++11 нет функции make_unique()
Re[20]: C++11 'new' и 'delete' устарели ?
От: smeeld  
Дата: 26.02.14 13:02
Оценка: +1
T>В стандарте C++11 нет функции make_unique()

template <typename T> unique_ptr<T> make_unique(int a){ return unique_ptr<T>(new T(a)); };

Теперь есть, правда не в стандарте.
Re[20]: C++11 'new' и 'delete' устарели ?
От: jazzer Россия Skype: enerjazzer
Дата: 27.02.14 03:32
Оценка:
Здравствуйте, tstalker, Вы писали:

T>В стандарте C++11 нет функции make_unique()


А в С++14 есть.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.