У меня есть объекты, которые используют перегруженные операторы new/delete, поскольку я использую пулы памяти для выделения их памяти. Они выглядят примерно так:Как распределяет распределитель stl по умолчанию?
class Foo{
public:
void* operator new(size_t nbytes){
return MemoryManager::GetInstance().AllocFooTypeMemory();
}
void operator delete(void* p)
{
MemoryManager::GetInstance().FreeFooTypeMemory(p);
}
};
Теперь мой вопрос, как он тогда работает, когда я создаю STL контейнер указателей Foo? Here написано, что STL по умолчанию Распределителя использований :: Оператора нового выделить память в container.When не использует его? Я попытался увидеть, если Foo-х новый сработал при вызове
std::vector<Foo*> fooVector;
fooVector.reserve(10);
, но ничего не происходит ,
У меня есть несколько вопросов:
Правильно ли я в виду, что в этом случае Распределитель выделяет память только для указателей?
Означает ли это, что распределитель вызывает «новое» на Foo, когда контейнер хранит объекты, а не указатели?
Также, если да, значит ли это, тогда мне не нужно писать пользовательский распределитель с пулом mem, если я уже использую пул для выделения памяти в объектах (например, в примере Foo)?
UPDATE:
Для того, чтобы понять, я принимаю во внимание, что только объект, который перегружает новым/удалить с пулом памяти связаны с этой question.i я полностью осознает, что объект, который не имеет нового/удаленная перегрузка по-прежнему использует кучу по умолчанию в качестве источника для распределения динамической памяти.
Нет, вы все еще используете аллокатор по умолчанию с кодом –
Я знаю, что я все еще использую аллокатор по умолчанию, но он будет использовать «новую», чтобы выделить Foo-х? –
Он не будет использовать 'Foo', если вы никогда не скажете ему использовать' Foo'. – tenfour