0

동적 할당과 관련하여 매우 기본적인 doute가 있습니다. 가능한 구문에 따라 나무를 연구하면서 나는 모두 동적 인 할당이라고 말 해왔다.기본 동적 할당 예제 이해

첫째 :

int* px(nullptr); 
px = new int; 
*px =20; 

그리고 더 간결 하나에도

int* px(nullptr); 
px = new int(20); 

또는 :

int*px(new int(20)); 

그런 다음 같은 설명에 두 번째 순간에 나는 것을 들었습니다 세 번째 경우는 실제로 정적 할당입니다. 나는 혼란 스럽다.

사실입니까? 누군가 제발 설명해 주시겠습니까?

감사합니다.

+2

나는'px * = 20;'대신'* px = 20;'이어야한다고 믿는다. – triclosan

+0

아니, 사실이 아니다. 세 가지 예 모두 똑같은 일을합니다. –

답변

2

첫 번째 예 (A delete px;를 통해) 명시 적으로 삭제해야하며, 파괴 값 "nullptr". 두 번째 줄은 힙에 할당 된 정수를 만들고 px에 정수에 대한 포인터를 할당합니다. 마지막 줄은 px를 역 참조하고 20을 힙 값에 할당합니다. 두 번째 예에서

는 :

int* px(nullptr); 
px = new int(20); 

두 번째 줄은 20의 값으로 힙에 할당 int를 생성하고이 픽셀에 대한 포인터입니다 할당합니다. 마지막 예에서

:

int*px(new int(20)); 

당신은 값 20 힙 할당 된 정수를 만드는 그 포인터가 정수 포인터 (PX)을 초기화 인수로 다시 전달됩니다. 그것은 다음과 같습니다.

int* px = new int(20); 

질문에 대답하기 위해 "new"가 포함 된 줄만 동적 메모리 할당입니다.

new = 힙이 할당됩니다. 그렇지 않으면 새 또는 malloc을 사용하는 함수/연산자를 호출하지 않는 한 스택이 할당됩니다.

+0

도움 주셔서 감사합니다! 이제는 아주 분명합니다. – Paul

2

모든 예제에는 정적 및 동적 할당의 조합과 자동 및 동적 메모리에 각각있는 2 개의 변수가 있습니다.

Pedantically, 포인터 px 자동 변수이며, (*px)을 가리키는 포인터는 동적으로 할당 된 변수입니다.

int* px(nullptr); 
px = new int; 
*px =20; 

첫 번째 줄은 스택에 할당 포인터 및 양수인를 작성합니다 자동 범위를 벗어나면

px*px

+0

답장을 보내 주셔서 감사합니다. 텍스트를 통해 어떤 예를 들어 설명해 주시겠습니까? – Paul

+0

@Paul 모두.모두 int 형의 정적으로 할당 된'px' 변수와'int' 형의 동적으로 할당 된 변수 ('px' 또는'* px'가 가리키는 변수)를 가지고 있습니다. –

+0

아마도 "세 가지 코드 모두 똑같은 일을합니다"라고 말하면이 대답을 시작할 수 있습니다. –