std::shared_ptr и лямбда функции |
Здравствуйте, гость ( Вход | Регистрация )
std::shared_ptr и лямбда функции |
alexy |
24.10.2013, 22:16
Сообщение
#11
|
Студент Группа: Участник Сообщений: 44 Регистрация: 4.8.2010 Пользователь №: 1931 Спасибо сказали: 0 раз(а) Репутация: 0 |
под чем собираешь? с какими опциями? иногда у конкретных версий-систем бывают разные особенности. ну и сторонние библиотеки можно по-разному собирать. g++ . А какие сторонние библиотеки? это было только std.. Раскрывающийся текст
если например (это твой код из последнего поста, с потоками из std) сказать то собиреться, а если то не собереться... ерунда какая-то. вот выхлоп
bind ничего не делает сам. существование объектов должен обеспечить программист. на этот раз не стала писать по старой привычке, через boost , сделала всё через std. хотя я не сравнивала скорость реализаций. это ещё открытый вопрос. ну да.. сам ничего не далет)) я про деструктор говорил. этот код ответил на вопрос да, скорость не знаю.. но мне кажется std как бы родной . хотя например upgradable мутекса там нету, а нужен.. |
|
|
Iron Bug |
25.10.2013, 17:27
Сообщение
#12
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
именно bind ничего особенного не делает. это свойство shared_ptr - увеличивать счётчик при передаче в любую функцию. поэтому bind тут просто выступает в роли функтора, в котором есть shared_ptr. когда функтор отрабатывает и уничтожается - освобождается и shared_ptr. если бы там был обычный указатель - он бы рухнул при вызове в потоке.
а насчёт boost: я его использую, кажется, с 31-й версии (если я правильно помню). так что для меня это уже почти что десять лет практики и я привыкла его использовать везде. так как boost - не просто библиотека, а испытательный полигон стандартизации С++, то почти все разработки boost потом переходят в стандарт. насчёт сборки с потоками: вообще, GCC принимает опцию -pthread (не -lpthread!), которая определена как -D_REENTRANT -lpthread. либо добавь её, либо определение реентерабельных функций. в старых компиляторах библиотеки и сорцы иногда ещё нужно было указывать в обязательно строгом порядке. попробуй указать линковку после сорца. как-то так:
но обычно для простых сорцов порядок сборки не так уж важен. Сообщение отредактировал Iron Bug - 25.10.2013, 18:08 |
|
|
Iron Bug |
25.10.2013, 20:26
Сообщение
#13
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
и ещё, кстати, про потоки и функции: может, тебе стоит посмотреть на библиотечку <future>, в частности на std::async? штука полезная. по-моему, как раз очень близко к тому, что ты пытается реализовать.
|
|
|
lanz |
17.6.2014, 23:39
Сообщение
#14
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
А у меня вопрос по этому кусочку:
Зачем здесь захватывается pfoo? Оно же и так скопируется при вызове лямбды? |
|
|
Iron Bug |
18.6.2014, 7:55
Сообщение
#15
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
да, он там не нужен. видимо, просто остался от правки какого-то другого кода.
Сообщение отредактировал Iron Bug - 18.6.2014, 7:56 |
|
|
Текстовая версия | Сейчас: 20.4.2024, 0:22 |