|
Аллоцирование памяти в односвязном списке
|
|||
---|---|---|---|
#18+
Допустим у нас есть класс, который реализует односвязный список (шаблонный класс). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
в прайват секции описана нода, которая состоит из данных и ссылки на следующий элемент. Задача: с помощью своего аллокатора выделять память под элементы списка. В чём вопрос: Посмотрел List из библиотеки stl, там в шаблоне класса указано что аллокатор того же типа, что и данные, которые будет хранить List. Но мне же надо аллокатором выделять под всю ноду (или ноды) целиком, то есть аллокатор должен быть Alloc<Node>. Не могу разобрать этой механики, под что должен выделять память аллокатор? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 23:26 |
|
Аллоцирование памяти в односвязном списке
|
|||
---|---|---|---|
#18+
Код: plaintext 1.
alloc - это тип std::allocator<T> инстанцированный для типа T Когда вы пишете Тип (...) то тут создается экземпляр типа Тип, т.е. в данном случае экземпляр std::allocator<T>. А потом вы его присваиваете в Node*, который вообще совершенно другого типа. Т.е. тут вообще какая-то фигня написана. Вместо этого вам надо получить тип std::allocator<Node<T>> и для него создать экземпляр и для него вызвать метод allocate() Примерно так (пишу по памяти): Код: plaintext 1. 2. 3.
PS. В C++ 11 логика rebind реализуется также через std::allocator_traits ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 00:45 |
|
Аллоцирование памяти в односвязном списке
|
|||
---|---|---|---|
#18+
То, что у меня фигня написана - факт. Я примерно показал, что хотел бы реализовать. Какой аллокатор и для какого типа я использовал в коде прекрасно знаю. Вопрос в другом, как в контейнерах стандартной библиотеки это реализовано. На счёт rebind - понял. Я забыл :) про его существование. Спасибо большое. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 01:16 |
|
Аллоцирование памяти в односвязном списке
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, ещё раз спасибо. Получилось вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2018, 22:36 |
|
Аллоцирование памяти в односвязном списке
|
|||
---|---|---|---|
#18+
ShevgeniyПолучилось вот та Разве параметр метода allocate() не количество создаваемых объектов?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2018, 23:03 |
|
|
start [/forum/topic.php?fid=57&msg=39733844&tid=2017718]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 254ms |
total: | 362ms |
0 / 0 |