2011-04-05 6 views
0

생성자가 호출되면 스택에 푸시할까요? 그렇다면 스택에서 푸시됩니다.스택의 생성자

+4

이 질문에 대한 답변을 얻으려면 좀 더 구체적으로 가야합니다. – JaredPar

+0

스택에 무엇을 밀어 넣으시겠습니까? –

+0

생성자는 단지 함수입니다. –

답변

1

생성자 (또는 다른 함수)가 호출되면 호출 주소가 스택에 푸시됩니다. 함수가 반환 될 때 스택에서 꺼내집니다. 함수 자체 (생성자 또는 기타)는 스택에 푸시되지 않습니다.

이것은 물론 함수의 코드가 인라인으로 생성되지 않았다고 가정합니다.이 경우에는 호출도 반환도없고 스택 사용도 전혀 없을 것입니다.

1

스택에 개체를 만들면 스택 프레임/범위를 종료 할 때 개체가 삭제되거나 삭제됩니다.

0

어디서나 클래스를 생성하기 위해 생성자가 호출됩니다.

{ 
    Foo f; 
    ... 
} 

그런 다음 Foo는 로컬 범위를 가지며 스택에 할당되고 거기에서 구성됩니다.

new Foo f; 

다음 푸 힙에 할당되며, 다음이 구축 될 것입니다 : 당신이 뭔가를 작성하는 경우. 첫 번째 Foo는 파괴되어 실행 스레드가 둘러싸는 범위 (중괄호)를 벗어날 때 스택에서 꺼내집니다. 두 번째 Foo는 삭제되고 삭제 될 때 해제됩니다.

+0

'Foo f();'는 객체가 아니라 함수를 선언합니다. 'Foo f;'를 대신 사용해보십시오. –

+0

예. 피곤할 때마다 나를 망쳐 놨어. 감사. – swestrup