Здравствуйте, 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.
Здравствуйте, 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};
Здравствуйте, Evgeny.Panasyuk, Вы писали:
NB>>просто просили продемонстрировать пример именно для unique_ptr.
EP>Я думаю изначально речь всё же шла про wrapping penalty.
wrapping penalty можно получить если у нас не один, а два разных делетера.
или один делетер и один еще что-нибудь (или два что-нибудь)
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Случаи overkill'а можно продемонстрировать практически для чего угодно, например:
EP>EP>auto x = make_unique<Foo>(1);
EP>// vs
EP>Foo x{1};
EP>
В стандарте C++11 нет функции make_unique()