Бьорн, похоже, вы в корне не понимаете, как работают стеки и ресурсы. Читайте о них.
То, что вы спрашиваете, невозможно, поскольку память, выделенная alloca, «освобождается», когда вы возвращаетесь из функции, которая ее выделила (и, в отличие от Патрика, вставка не может изменить ее поведение). Я пишу «освобожден», потому что он на самом деле не освобожден, он просто выходит из области видимости, как любая другая переменная стека. Таким образом, последующее его использование приводит к неопределенному поведению.
Предположим, вы выделяете кусок памяти в YourAllocator::allocate
, который вызывается из d.push_back()
:
deque<int, AllocaAllocator> d;
d.push_back(42); // calls alloca
printf("Hello\n");
printf("%d\n", d[0]);
Память, выделенная alloca, может быть перезаписана стековыми кадрами push_back
и printf
, поэтому на выходе может не быть 42, это может привести к сбою или любой другой вещи.