어제 너무 놀아서.. 공부를 거의 못했기 때문에 이어서 작성해볼게요
주석으로 달아두면 더 보기 편할 것 같아서 포스팅 방식을 바꿔봤어요
레퍼런스를 리턴하는 함수
오류가 생기고 런타임 오류가 발생합니다.
문제점은 주석에도 있다시피 function의 리턴타입은 int&인데 리턴하는 function안에 정의되어있는 a는 리턴과 함께 사라진다.
원래 참조하고 있던 변수가 이미 사라져 오류가 발생하게 된다. 이것이 dangling reference.
레퍼런스를 리턴하는 함수에서는 지역변수의 레퍼런스를 리턴하지 않도록 조심해야 한다.(사라지니까)
외부변수의 레퍼런스를 리턴하는 것은 다음과 같이 가능하다.
이렇게 참조자를 리턴하는 경우에는 레퍼런스가 참조하는 타입의 크기와 상관없이 주소값 복사로 전달이 끝나기 때문에 매우 효율적이라는 장점이 있다.
이것은 오류가 생기게 되는데, 함수의 리턴값이 해당 문장이 끝나면 바로 사라지는 값이기 때문에 참조자를 만들면 바로 댕글링 레퍼런스가 되버리기 때문이다.
const 참조자로 받았더니 오류 없이 컴파일이 잘된다. 주석을 읽으면 더 자세히 설명되어있다.!
프로그램이 정확히 실행되려면 컴파일 시 모든 주소값이 확정되어야 한다. 그런데 이를 위해서는 프로그램에 많은 제약이 따르므로 자유롭게 할당, 해제할 수 있는 힙이라는 공간이 생겼다.
이를 c언어에서는 malloc, free 함수로 힙에서의 메모리 할당을 지원했다.
c++에서는 힙에서의 메모리 할당을 new, delete로 지원한다.
new=malloc, delete=free 이런 관계라고 생각하면 쉽다.
간단하게 보면 위와 같이 new와 delete로 메모리를 할당하고 해제한다.
delete를 하기 위해서는 new로 메모리를 할당해줘야 한다. 일반 지역변수를 해제하려 하면 경고메시지가 나온다.
이 코드는 배열의 사이즈를 입력받고 그 배열 크기만큼 숫자를 한개씩 입력받는다. 그러면 리스트를 하나씩 또 출력해주는 코드이다.
arr_size에 따라 배열의 크기가 달라지니까 new로 메모리를 입력받은 수만큼 할당한다.
자세한건 주석을 확인하면 된다.!
이렇게 잘 실행되는거 보이져!
'CODING > C++ STUDY' 카테고리의 다른 글
C++ 독학 6일차(7/24) - 소멸자, 복사생성자 (0) | 2021.07.26 |
---|---|
C++ 독학 5일차 - 객체 지향 프로그래밍, 함수의 오버로딩 (0) | 2021.07.23 |
C++ 독학 3일차 레퍼런스 도입 (0) | 2021.07.20 |
C++ 독학 1일차! hello world 출력 및 코드 분석 (0) | 2021.07.18 |
C++ 공부 시작 (0) | 2021.07.16 |