Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Зачем нужен аллокатор?


Автор: Breezy 5.3.2006, 16:28
Я не великий знаток стл-я но пишу контейнер дружелюбный с стл-м и вот появляються проблемы с памятью.

Как обнаружилось то алокатор не вызывает конструктор класса, хотя страуструп пишет что он использует оператор new,delete которые это делают.

Вот и вопрос: что надо вручную инициализировать обекты?

И вообще стоит использовать алокатор? ведь можно обойтись new,delete?

Автор: Daevaorn 5.3.2006, 17:22
Breezy, Если ты пишешь свой контейнер, то испольование аллокаторов исключительно твой выбор. Хочешь используй, хочешь нет. В stl контейнерах память может и выделяется через new, но не обязтельно при этом, что будут вызваны конструкторы объектов. За это в последствии отвечает сам код контейнера, который вызывает размещающий оператор new для выделенной аллокатором памяти. Ты же можешь для простоты вызывать обычный new (и соответсвенно delete).

Автор: MAKCim 5.3.2006, 17:59
Цитата

И вообще стоит использовать алокатор? ведь можно обойтись new,delete?

весь вопрос в повторности используемого кода
при использовании аллокатора появляется гибкость работы с памятью, т. е написав новый аллокатор мы в корне меняем управление выделением памяти для объектов контейнера при этом затратив минимум усилий (если их вообще придется затрачивать) на переделку самого контейнера

Автор: Breezy 5.3.2006, 19:49
А в чем собственно гибкость аллокатора перед new? создаеш контейнер все что внутри конечного пользователя не касаеться...
Может аллокатор нужен для других целей? Мне лично привычней использовать new, код тоже будет проще писать, меньше мороки...

Автор: Daevaorn 5.3.2006, 20:00
Breezy,
Как сказал уже MAKCim - аллокатор добавляет гибкости. Разные аллокаторы могут по разному выделять память: из разных областей(кучи, стека и т.д.), разными блоками, адаптированными к размерам элементов. Вобщем позволяют улучшить работоспособность контейнера незаметным для него образом.

Автор: Breezy 5.3.2006, 20:35
Тоесть морока на стадии проектирования стоит выделки. С этим разобрался.

И еще вопросик smile у меня дикая привязаность к автоматической подстановке. Тоесть привычка когда ставиш "."/"->" видеть члены класса. Почему когда пишеш шаблон то внутриение классы не распознаються? Это просто недоработка или так и надо?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)