Для собственного менеджера памяти обычно переписывают new() и delete(), с этим вроде все опнятно.
Но вот как в такой ситуации поступают с аллокаторами контейнеров STL, вроде как они должны самостоятельно отвечать за распределение памяти минуя операции new() и delete(), если правильно понял.
В такой ситуации, как можно переопределить аллокаторы, чтобы заставить их обращаться к собственному менеджеру памяти.
Хотелось бы универсальное решение, не привязанное скажем к STLPort или другой реализации, если такое вообще существует.
Заранее спасибо за ответ.
Re: Собственные аллокаторы по аналогии с собственным new()
От:
Аноним
Дата:
27.06.07 06:23
Оценка:
Здравствуйте, Tujh, Вы писали:
T>Для собственного менеджера памяти обычно переписывают new() и delete(), с этим вроде все опнятно. T>Но вот как в такой ситуации поступают с аллокаторами контейнеров STL, вроде как они должны самостоятельно отвечать за распределение памяти минуя операции new() и delete(), если правильно понял. T>В такой ситуации, как можно переопределить аллокаторы, чтобы заставить их обращаться к собственному менеджеру памяти. T>Хотелось бы универсальное решение, не привязанное скажем к STLPort или другой реализации, если такое вообще существует.
T>Заранее спасибо за ответ.
Re[2]: Собственные аллокаторы по аналогии с собственным new(
От:
Аноним
Дата:
27.06.07 06:34
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Tujh, Вы писали:
T>>Для собственного менеджера памяти обычно переписывают new() и delete(), с этим вроде все опнятно. T>>Но вот как в такой ситуации поступают с аллокаторами контейнеров STL, вроде как они должны самостоятельно отвечать за распределение памяти минуя операции new() и delete(), если правильно понял. T>>В такой ситуации, как можно переопределить аллокаторы, чтобы заставить их обращаться к собственному менеджеру памяти. T>>Хотелось бы универсальное решение, не привязанное скажем к STLPort или другой реализации, если такое вообще существует.
T>>Заранее спасибо за ответ.
А>Посмотри здесь
Здравствуйте, Tujh, Вы писали:
T>Для собственного менеджера памяти обычно переписывают new() и delete(), с этим вроде все опнятно. T>Но вот как в такой ситуации поступают с аллокаторами контейнеров STL, вроде как они должны самостоятельно отвечать за распределение памяти минуя операции new() и delete(), если правильно понял. T>В такой ситуации, как можно переопределить аллокаторы, чтобы заставить их обращаться к собственному менеджеру памяти.
сделав свой аллокатор (а не переопределив чтото там) инстанциируешь все что тебе хочется (контейнеры STL) указывая его в том месте где шаблон требует аллокатора -- в чем проблема то?
главное чтоб интерфейс твоего аллокатора соответствовал требованиям стандарта
проблемы ты огребешь если твой аллокатор окажеца без конструктора по умолчанию (как вот у меня было недавна) %) -- и соответственна все что ты им наинстанциируешь тоже
проблема даже не в создании контейнеров -- все они имеют конструкторы принимающие экземпляр аллокатора
а в том что много алгоритмов (в основном в boost'e) написаны в расчете на то что стринги к примеру дефолтно конструктабелны, что в данном случае буит не так ;(( -- вот тут то и начнуца запары...
T>Хотелось бы универсальное решение, не привязанное скажем к STLPort или другой реализации, если такое вообще существует.
вполне универсально
T>Заранее спасибо за ответ.
Re: Собственные аллокаторы по аналогии с собственным new()
От:
Аноним
Дата:
27.06.07 06:44
Оценка:
Здравствуйте, Tujh, Вы писали:
T>Для собственного менеджера памяти обычно переписывают new() и delete(), с этим вроде все опнятно. T>Но вот как в такой ситуации поступают с аллокаторами контейнеров STL, вроде как они должны самостоятельно отвечать за распределение памяти минуя операции new() и delete(), если правильно понял. T>В такой ситуации, как можно переопределить аллокаторы, чтобы заставить их обращаться к собственному менеджеру памяти. T>Хотелось бы универсальное решение, не привязанное скажем к STLPort или другой реализации, если такое вообще существует.
T>Заранее спасибо за ответ.
Здравствуйте, Tujh, Вы писали:
T>Для собственного менеджера памяти обычно переписывают new() и delete(), с этим вроде все опнятно. T>Хотелось бы универсальное решение, не привязанное скажем к STLPort или другой реализации, если такое вообще существует.
Если ты хочешь перекрыть глобальные new и delete, то как бы нет проблем. STL тоже перейдёт на твой мэнеджер.
А если для какого-то конкретного объекта, и при этом в STL-контейнерах захочешь, чтобы эти объекты аллокировались так же, то определи свой аллокатор...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском