auto_ptr не работает.Medium-rare wrote: 23 Jan 2018 01:59Ну, shared_ptr в collections точно работает, а вот предлагаемая замена...
А был ли мальчик? (помянем плюсы)
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: А был ли мальчик? (помянем плюсы)
-
- Уже с Приветом
- Posts: 3003
- Joined: 14 Apr 2004 01:11
- Location: SFBA (было: Минск, Беларусь)
Re: А был ли мальчик? (помянем плюсы)
Одной из причин разработки unique_ptr как раз и было предоставление не-shared "умного указателя", совместимого (в отличие от auto_ptr) со стандартными контейнерами. Функциональность shared_ptr избыточна (и, поэтому, его реализация более громоздка и менее эффективна) в ситуациях, когда никакого sharing-а фактически нет.Medium-rare wrote: 23 Jan 2018 01:59 Ну, shared_ptr в collections точно работает, а вот предлагаемая замена...
Best regards,
Андрей
Андрей
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: А был ли мальчик? (помянем плюсы)
Дык а зачем переписывать, начните использовать в новом коде, а старый оставьте как есть. Или вы на древнем компиляторе? -std=c++11 и вперед!M. Ridcully wrote: 22 Jan 2018 23:10Вроде новые стандарты принимаются - 11, 14, 17й...Сабина wrote: 22 Jan 2018 22:04 Кстати да, интересно было бы понять как именно развивается язык С++.
У меня вот коллега всё ратует на новый стандарт перейти. Я вроде бы не против - практический Boost можно бы было выкинуть, от shared_ptr избавиться, но не настолько мне это нужно, чтобы калории на это тратить...![]()
![Smile :)](./images/smilies/icon_smile.gif)
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: А был ли мальчик? (помянем плюсы)
Если std::unique_ptr устраивает в контейнере, то до тех пор, пока программист не пытается выполнить над ним одну из кучки законных операций. А избыточный std::shared_ptr просто всегда на его месте устроит. Не то, чтобы я призывал то или другое использовать в котейнерах.AndreyT wrote: 23 Jan 2018 02:51 Одной из причин разработки unique_ptr как раз и было предоставление не-shared "умного указателя", совместимого (в отличие от auto_ptr) со стандартными контейнерами. Функциональность shared_ptr избыточна (и, поэтому, его реализация более громоздка и менее эффективна) в ситуациях, когда никакого sharing-а фактически нет.
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 3003
- Joined: 14 Apr 2004 01:11
- Location: SFBA (было: Минск, Беларусь)
Re: А был ли мальчик? (помянем плюсы)
Это о каких именно "законных операциях" идет речь?Medium-rare wrote: 23 Jan 2018 03:38Если std::unique_ptr устраивает в контейнере, то до тех пор, пока программист не пытается выполнить над ним одну из кучки законных операций.AndreyT wrote: 23 Jan 2018 02:51 Одной из причин разработки unique_ptr как раз и было предоставление не-shared "умного указателя", совместимого (в отличие от auto_ptr) со стандартными контейнерами. Функциональность shared_ptr избыточна (и, поэтому, его реализация более громоздка и менее эффективна) в ситуациях, когда никакого sharing-а фактически нет.
"Забрать" значение у элемента такого контейнера можно, но для этого надо сознательно и явно постараться.
Best regards,
Андрей
Андрей
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: А был ли мальчик? (помянем плюсы)
С компиляторами всё в порядке.Prosche wrote: 23 Jan 2018 03:02Дык а зачем переписывать, начните использовать в новом коде, а старый оставьте как есть. Или вы на древнем компиляторе? -std=c++11 и вперед!M. Ridcully wrote: 22 Jan 2018 23:10Вроде новые стандарты принимаются - 11, 14, 17й...Сабина wrote: 22 Jan 2018 22:04 Кстати да, интересно было бы понять как именно развивается язык С++.
У меня вот коллега всё ратует на новый стандарт перейти. Я вроде бы не против - практический Boost можно бы было выкинуть, от shared_ptr избавиться, но не настолько мне это нужно, чтобы калории на это тратить...![]()
![]()
Код у нас, в-принципе, один.
Пока речь шла просто о том, чтобы изменить Makefiles и убедиться, что не регрессий. _Теоретически_, вроде, их быть не должно. Но вот вроде у всех пока есть чем заняться, и просто оправдать это усилие ради довольно эзотерической цели (ИМХО) мне сложно.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: А был ли мальчик? (помянем плюсы)
Хеххх. Усилия... Я вот заканчиваю щас миграцию солюшенов из Студии (msbuild) на симейк+нинзя. Самый большой из которых на 498 плюсовых, питоновских и шарповских проектов, вот это переход, а у вас так, работы на полдня с перекурами.M. Ridcully wrote: 23 Jan 2018 05:18 С компиляторами всё в порядке.
Код у нас, в-принципе, один.
Пока речь шла просто о том, чтобы изменить Makefiles и убедиться, что не регрессий. _Теоретически_, вроде, их быть не должно. Но вот вроде у всех пока есть чем заняться, и просто оправдать это усилие ради довольно эзотерической цели (ИМХО) мне сложно.
![Smile :)](./images/smilies/icon_smile.gif)
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: А был ли мальчик? (помянем плюсы)
Ну для примера. Уже подумал, что что-то подзабыл со времён интересных дискуссий во время выхода 11-го стандарта. Хотя там выше линк есть. Но таки попробовал, не веря своим глазам.
![Confused :?](./images/smilies/icon_confused.gif)
Code: Select all
static std::vector<std::unique_ptr<int>> vctA;
void blah()
{
/// enjoy
std::vector<std::unique_ptr<int>> vctB(vctA.begin(), vctA.end());
}
Это предложение предлагает правильность идеи использования unique_ptr в контейнерах? Но постараться..."Забрать" значение у элемента такого контейнера можно, но для этого надо сознательно и явно постараться.
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 3003
- Joined: 14 Apr 2004 01:11
- Location: SFBA (было: Минск, Беларусь)
Re: А был ли мальчик? (помянем плюсы)
Ну то есть эта попытка завершилась безуспешно. Поэтому не совсем понятен комментарий "enjoy".Medium-rare wrote: 23 Jan 2018 06:06Ну для примера. Уже подумал, что что-то подзабыл со времён интересных дискуссий во время выхода 11-го стандарта. Хотя там выше линк есть. Но таки попробовал, не веря своим глазам.![]()
Code: Select all
static std::vector<std::unique_ptr<int>> vctA; void blah() { /// enjoy std::vector<std::unique_ptr<int>> vctB(vctA.begin(), vctA.end()); }
Не совсем понятно, что вы здесь хотите сказать.Medium-rare wrote: 23 Jan 2018 06:06Это предложение предлагает правильность идеи использования unique_ptr в контейнерах? Но постараться..."Забрать" значение у элемента такого контейнера можно, но для этого надо сознательно и явно постараться.
Best regards,
Андрей
Андрей
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: А был ли мальчик? (помянем плюсы)
AndreyT,
Как тип для помещения в контейнер:
shared_ptr удовлетворяет все операции над контейнерами.
unique_ptr удовлетворяет часть операций над контейнерами.
Более ничего.
Как тип для помещения в контейнер:
shared_ptr удовлетворяет все операции над контейнерами.
unique_ptr удовлетворяет часть операций над контейнерами.
Более ничего.
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 10065
- Joined: 20 May 1999 09:01
Re: А был ли мальчик? (помянем плюсы)
Чем плохи обычные пойнтеры, кроме того, что надо следить за памятью? Ну и хорошо, что надо, обычно это как то дисциплинирует и заставляет продумывать дизайн. А что новое дают те же ламбды функции в отличии от С указетелей на функции по большому счету? Только что можно лениться и не передавать лишние параметры, как аргументы? Что все же принципиально нового есть в C++ 11, 14, ... что нельзя было сделать раньше и что значительно расширяет возможности? На мой вкус единственный бесспорный кандидат это vector и иже с ними. Ну невозможно работать с fixed sized array. Ну и операции со строками. Threading по прежнему примитивный, что совсем не согласуется с требованиями сегодняшнего дня.Medium-rare wrote: 23 Jan 2018 06:52 AndreyT,
Как тип для помещения в контейнер:
shared_ptr удовлетворяет все операции над контейнерами.
unique_ptr удовлетворяет часть операций над контейнерами.
Более ничего.
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: А был ли мальчик? (помянем плюсы)
Чтобы не плодить сущности в случае с контейнером, начиная с C++ 11 moveable тип ему давать.
И жить долго, и счастливо, не зная про требования сегодняшнего дня.
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: А был ли мальчик? (помянем плюсы)
А что именно вам от threading не хватает?ksi wrote: 23 Jan 2018 16:47 Threading по прежнему примитивный, что совсем не согласуется с требованиями сегодняшнего дня.
ИМХО самое главное достоинство - что он там, наконец, появился, как средство самого языка / стандартной библиотеки.
А вообще ваш ответ - не про threading, а выше - наглядная демонстрация того, что плюсам, возможно, пора на свалку истории. Нельзя бесконечно добавлять фичи, не убирая их. Когда над одним кодом работают люди с весьма разным представлением о том, что такое правильный C++ код, это неизбежно рождает монстров. Никакие линты не помогут.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 10065
- Joined: 20 May 1999 09:01
Re: А был ли мальчик? (помянем плюсы)
Threading это отдельная тема, у нас очень серьезные и нестандартные задачи с точки зрения threading, еоторые просто невозможно имплементировать стандартными средставими типа мьютексов (без огромной потери перформанса), поэтому встроенные средства C++ бесполезны, у нас свои библиотеки. Стандарнтые средства как бы слишком примитивны.M. Ridcully wrote: 23 Jan 2018 18:08А что именно вам от threading не хватает?ksi wrote: 23 Jan 2018 16:47 Threading по прежнему примитивный, что совсем не согласуется с требованиями сегодняшнего дня.
ИМХО самое главное достоинство - что он там, наконец, появился, как средство самого языка / стандартной библиотеки.
А вообще ваш ответ - не про threading, а выше - наглядная демонстрация того, что плюсам, возможно, пора на свалку истории. Нельзя бесконечно добавлять фичи, не убирая их. Когда над одним кодом работают люди с весьма разным представлением о том, что такое правильный C++ код, это неизбежно рождает монстров. Никакие линты не помогут.
С++ важен своим быстродействием. Быстрей ничего еще не придумали. А это очень важно во многих сферах. Главное это не убить
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: А был ли мальчик? (помянем плюсы)
Ну а на основе чего эти ваши самые библиотеки сделаны?ksi wrote: 23 Jan 2018 18:21 Threading это отдельная тема, у нас очень серьезные и нестандартные задачи с точки зрения threading, еоторые просто невозможно имплементировать стандартными средставими типа мьютексов (без огромной потери перформанса), поэтому встроенные средства C++ бесполезны, у нас свои библиотеки. Стандарнтые средства как бы слишком примитивны.
Если вы про lock free и проч., то это тоже можно на основе теперь стандартных средств C++ делать.
Но вообще я вам сочувствую. Сколько раз ни сталкивался с "нестандартным тредингом", всегда в конечном счёте это было болью. Даже в тех случаях, когда работало.
Честно говоря думал, что вы имели в виду что-то вроде того, что в Golang. Там действительно с точки зрения threading что-то новое, более-менее.
Как сказать, на C тоже можно писать довольно быстро.ksi wrote: 23 Jan 2018 18:21 С++ важен своим быстродействием. Быстрей ничего еще не придумали. А это очень важно во многих сферах. Главное это не убить
Мир Украине. Свободу России.