Стандартные классы коллекции используют класс Allocator
для выделения памяти для сохраняемых элементов.Распределитель по умолчанию будет размещать данные в бесплатном хранилище.Вы можете предоставить свое собственное, если хотите, и, я полагаю, если вы захотите достаточно сильно, вы можете выделить его в стеке, но вам придется проделать немало дополнительной работы, чтобы это произошло.
Обратите внимание, что вы не должны выделить сам объект в бесплатном хранилище, чтобы это произошло.На самом деле, ваша MyClass *pClass = new MyClass();
обычно плохая идея.Обычно вы просто хотите использовать MyClass Class;
и покончить с этим.Это выделит место для самого объекта коллекции (обычно довольно маленького) в стеке, но пространство для того, что он хранит, все равно будет обычно поступать из свободного хранилища (опять же, через распределитель).Помимо прочего, это помогает автоматизировать управление памятью - когда объект коллекции выходит из области видимости, он будет уничтожен.Его деструктор уничтожит содержащиеся в нем объекты и освободит память (все автоматически).