Создание объекта в куче без нового - PullRequest
4 голосов
/ 02 марта 2011

В C ++ возможно ли создать объект в куче без использования new или malloc?

Я думаю, что если я буду использовать контейнер STL, такой как vector, он будет помещен в кучу. Если я сделаю:

vector<Object> listObjs = vector<Object>();

Object x = Object(...);
...
listObjs.push_back(x);

Где находятся созданные здесь объекты?

Ответы [ 3 ]

7 голосов
/ 02 марта 2011

Объект, обозначенный x, находится в стеке. vector::push_back скопирует его в кучу.

Объект allocator внутри vector, вероятно, будет реализован с использованием new или malloc, хотя возможно, что он использует другой низкоуровневый API. Например, и Unix, и Windows предлагают API-интерфейсы отображения памяти, которые, в свою очередь, могут использоваться для реализации malloc, new и распределителей.

0 голосов
/ 02 марта 2011

Исходя из C # / Java?

std::vector<Object> listObjs; создать контейнер в стеке, который управляет массивом объектов, выделенных в куче

listObjs.push_back(Object()); выделить массив размером + 1, скопировать старый массив в новый и присвоить Object () последнему

0 голосов
/ 02 марта 2011

std::vector делает new там.

...