495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
||||||
1 | ||||||
Allocator_traits propagate_on_container_ - для чего они нужны26.06.2016, 21:59. Показов 4655. Ответов 4
Метки нет (Все метки)
В std::allocator_traits есть такие определения как propagate_on_container_copy_assignment, propagate_on_container_move_assignment и propagate_on_container_swap. Для чего они нужны и как ими можно пользоваться? С названия, я так понимаю, они должны определять копируемость, перемещаемость и обмениваемость своего типа, но вот код:
Добавлено через 57 секунд Да, и еще одно, что такое is_always_equal (since C++17) ?
0
|
26.06.2016, 21:59 | |
Ответы с готовыми решениями:
4
Для чего нужны сужающие преобразования как они работают и на сколько они важны? Перечисления (enum): для чего они нужны? Как, когда и какими перечислениями уместнее пользоваться? Объясните 35-36 строчки ,что они делают и для чего они ? .elf и для чего они нужны |
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
27.06.2016, 00:06 | 2 |
Сообщение было отмечено notAll как решение
Решение
Ну вот у контейнера есть аллокатор. У нас есть один объект - cont1, другой - cont2. Мы делаем:
cont1 = cont2; cont1 = std::move(cont2); std::swap(cont1, cont2); Что делать с элементами контейнера понятно и ежу, а вот что с аллокаторами? Должен ли cont1 продолжать использовать свой старый аллокатор, или должен брать из cont2? Что мы будем делать с аллокаторами в каждом конкретном случае - и определяется этими свойствами propagate_on_container_ххх. И я бы еще обратил тогда уж внимание на пару select_on_container_ххх. У нас есть класс аллокатора Alloc. Два его объекта-аллокатора a1 и a2 равны, если то, что выделено а1, может быть освобождено а2, - и наоборот. Если а1 и а2 для нашего Alloc всегда равны, то мы ставим is_always_equal в true_type. Если всегда не равны - false_type. По умолчанию же, а1 и а2 равны, только если у них нет внутреннего состояния (is_empty).
1
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
||||||
27.06.2016, 00:44 [ТС] | 3 | |||||
Все равно не очень понятно как задать эти свойства самому?
Я вижу только одну статическую функцию select_on_container_copy_construction()
Вот тут у меня есть код небольшего самописного контейнера. Как мне эти свойства задать здесь?
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
27.06.2016, 01:14 | 4 |
notAll, что мешает в качестве примера открыть код стандартной либы и посмотреть, как там это реализовано в том же векторе?
0
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
||||||
27.06.2016, 14:35 [ТС] | 5 | |||||
Уж слишком сложно там все написано Ладно, буду разбираться.
Добавлено через 13 часов 2 минуты Ну, в общем, порылся в исходниках std::vector, - там примерно так пользуются свойствами аллокатора (на примере оператора перемещения):
Добавлено через 7 минут Кстати, нашел интересный документ по C++17: Deprecating Vestigial Library Parts in C++17 - там многое хотят запретить в std::allocator.
0
|
27.06.2016, 14:35 | |
27.06.2016, 14:35 | |
Помогаю со студенческими работами здесь
5
Что такое compile-time алгоритмы и для чего они нужны? Динамические структуры. Для чего они? Try - catch - throw для чего они Для чего нужны интерфейсы? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |