Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2018, 11:44   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию C++ 11 shared_ptr

Есть вопрос из теста
You have some code that creates a HardwareContext object representing a hardware resource. You need to do some specialized cleanup tasks associated with this object when the destructor of the shared_prt referencing if executes when the reference count reaches zero.
Based on the scenario above, which action do you take to ensure your function cleanup() is executed as specified?
1) use shared_ptr_deleter instead of shared_ptr
2) pass cleanup as the second argument to shared_ptr
3) call addDeleter(cleanup) on the shared_ptr reference
4) override the destruction of the shared_ptr you create to point to cleanup
5) set the deleter property of the shared_ptr

Правильно ли я понимаю, правильный ответ 2, исходя из http://en.cppreference.com/w/cpp/mem...ptr/shared_ptr
сделать что-то подобное, именно это нужно для решения задачи?
std::shared_ptr<HardwareContext > sh4(new HardwareContext, cleanup())

Последний раз редактировалось polin11; 22.03.2018 в 11:47.
polin11 вне форума Ответить с цитированием
Старый 22.03.2018, 11:55   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

если cleanup это функция, то cleanup() это просто обычный вызов функции в этом месте.

Но да, делитер передается вторым аргументом.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.03.2018, 12:13   #3
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию

я так понял, что в задаче идет речь о дополнительной функции cleanup() которая должна после удаления shared_prt.count вызваться и провести какие-либо действия
polin11 вне форума Ответить с цитированием
Старый 22.03.2018, 12:15   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну дык после удаления ж, а не во время создания.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.03.2018, 12:17   #5
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию

Вы хотите сказать, что нужно
std::shared_ptr<HardwareContext > sh4(new HardwareContext, указатель на cleanup)

Последний раз редактировалось polin11; 22.03.2018 в 12:19.
polin11 вне форума Ответить с цитированием
Старый 22.03.2018, 12:27   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Да.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по std::shared_ptr и std::thread Shadowfirst Visual C++ 2 13.09.2017 07:55
shared_ptr и vector cheef Общие вопросы C/C++ 1 26.07.2014 18:30
Проблема с инициализацией shared_ptr mikepc Visual C++ 2 25.08.2010 09:36