2014-01-17 2 views
-5

방금 ​​나는 내 freind의 인터뷰에서 이것을 들었다. 그는 개체의 차이점과 생성 지점이 동적으로 생성되는지 대 동적으로 생성되었는지에 대해 질문 받았습니다.개체의 점과 동적으로 만들어진 개체?

예 :

Obj *test = new test(); 

Obj test; 

의 차이는 무엇이며 동적으로 객체를 생성 대 객체를 생성하는 점은 무엇

대? 한 가지 차이점은 동적으로 생성 된 변수가 힙에 있고 다른 스택이 스택에 있지만 더 큰 차이가있을 수 있다는 것입니다.

+1

당신은 동적으로 생성 된 것을 해제 할 수 있습니다. – ncm

+1

'new test(); // heap'과'Obj test; // on stack' –

+2

사람들은 왜 이것을 "너무 광범위하게"닫는가? 그것은 광범위하지 않습니다. 그것은 OP가이 문제를 연구하려고 시도하지 않았기 때문에 나쁜 질문입니다. 그러나 그것은 너무 광범위하지 않습니다. –

답변

0

주요 차이점은 객체의 수명입니다. 스택 객체는 자동으로 제어되지만 힙 객체의 경우 컨트롤러는 수동입니다. 다른 모든 차이는이 결과입니다.

4

C++에는 힙 및 스택 개념이 없습니다. 당신이 블록 지역 선언 객체를 만들 때

  • , 그것은 자동 저장 기간이 있습니다 대신, 어떤 할당이 두 가지 유형은 약 저장 기간입니다. 그러한 대상은 범위를 벗어나면 파괴됩니다.

  • new으로 개체를 만들 때 동적 범위 저장 기간이 있습니다. 이러한 물체는 수동으로 delete 때 파괴됩니다. 프로그래머 인 당신은 객체가 파괴되었는지 확인해야합니다.

가능한 경우 자동 저장 기간을 사용하는 것이 좋습니다. 서로 다른 범위간에 살아 남을 수있는 객체가 필요한 경우에만 동적 저장 기간이 필요합니다. 동적 저장 기간이 필요한 경우 동적 할당 객체의 수명을 관리하는 스마트 포인터 (예 : std::unique_ptr 또는 std::shared_ptr)를 사용하는 것이 좋습니다. 이렇게하면 메모리 누수를 피할 수 있습니다.

+2

** C++에는 힙 및 스택 개념이 없습니다 ** –

+0

@Pilot 표준에서 스택에 대한 유일한 언급은 예외를 throw 할 때 "스택 되감기"와 관련이 있습니다 -하지만 이것은 방금 채택 된 용어입니다 반드시 스택이 있다는 것을 의미하지는 않습니다. 힙은 전혀 언급되지 않았습니다. (분명히'std :: stack'과'make_heap'을 계산하지 않습니다.) –

+0

'new()'는 내부적으로'malloc()'과'malloc() == heap'을 내부적으로 호출합니다. –

관련 문제