Что это значит, когда он говорит «выделение объекта в строке в стеке»?Размещение объекта inline в стеке
Особенно «встроенный» бит
Что это значит, когда он говорит «выделение объекта в строке в стеке»?Размещение объекта inline в стеке
Особенно «встроенный» бит
Это означает, что все данные для объекта выделяется в стеке, и будет выталкивается, когда текущий метод завершается.
Альтернатива (которая встречается на C# и Java, или если вы используете указатель на C++) должна иметь ссылку или указатель на стек, который ссылается на данные объекта, которые выделяются в куче.
Я думаю, что «встроенный» здесь означает «как часть рамки стека для этого метода», в отличие от существующего отдельно от метода.
Ну, вы знаете, что такое стек, не так ли? Если вы объявляете функцию, скажем, C:
int foo() {
int bar = 42;
return bar;
}
Когда функция вызывается, некоторое пространство создается для получения информации о функции в стеке, а число bar
выделяется там. Когда функция возвращается, все в этом фрейме стека освобождается.
Теперь в C++:
class A {
int a;
int b;
A(int x, int y) {
a = x;
b = y;
}
~A() { // destructor
cout << "A(" << a << "," << b << ") being deleted!" << endl;
}
}
void foo() {
A on_the_stack(1,2);
A *on_the_heap = new A(3,4);
}
В таких языках, как Java, все объекты выделяются в куче (если компилятор не делает какой-то оптимизации). Но на некоторых языках, таких как C++, объекты класса могут идти прямо в стек так же, как int
s или float
s. Память из кучи не используется, если вы явно не назовете new
. Обратите внимание, что наш объект on_the_heap
никогда не освобождается (вызывая на нем delete
), поэтому он вызывает утечку памяти. С другой стороны, объект on_the_stack
автоматически освобождается при возврате функции и будет иметь свой деструктор, вызванный до этого.
Каков контекст предложения? – nus