프로그래밍/C++

#31. 참조 & 포인터

코딩하는상후니 2022. 7. 19. 22:03
 

 

 

*참조 vs 포인터
성능 : 똑같음 !!
편의성 : 참조 > 포인터
 
1. 편의성 관련
편의성이 좋다는게 꼭 장점만은 아니다.
포인터는 주소를 넘기니 확실하게 원본을 넘긴다는 힌트를 줄 수 있는데,  (명시적)
참조는 자연스럽게 모르고 지나칠 수도 있음.
 
ex) 마음대로 고친다면 ??
const 사용 -> (const StatInfo& info)
 
포인터도 const 사용 가능.
* 기준으로 앞에 붙이냐 / 뒤에 붙이냐 에 따른 차이
(const StatInfo* info) = (StatInfo const* info) => 데이터를 수정할 수 없음.
(StatInfo* const info) => 주소를 수정할 수 없음.
 
 
2. 초기화 여부
참조 타입은 바구니의 2번째 이름 (별칭)
-> 참조하는 대상이 없으면 절대 안됨.
반면 포인터는 그냥 어떤~ 주소라는 의미
-> 대상이 실존하지 않을 수 있음. ex) (nullptr), 포인터연산
포인터에서 '없다' 는 의미로 ?? => nullptr, NULL
참조타입은 nullptr 과 같은 의미가 없다.
 
포인터의 nullptr (없는 조건) 의 특성을 사용할 수도 있다.
ex) 특정 조건을 만족하는 몬스터를 찾는 함수
 
 
3. 포인터 연산
 

 


 

 

=> 그래서 무엇인가 ?? 사실 Team By Team ... 정해진 답은 없다.
ex) 구글에서 만든 오픈소스를 보면 거의 무조건 포인터 사용
ex) 언리얼 엔진에서는 Reference 도 애용
 
=> 없는 경우도 고려해야 한다면 pointer ( NULL 체크 필수 )
=> 바뀌지 않고 읽는 용도 ( readonly ) 만 사용하는 const ref&
=> 그 외 일반적으로 ref 선호  ( 명시적으로 호출 할 때 OUT 을 붙인다 )
=> 단, 다른 사람이 pointer 를 만들어놓은걸 이어서 만든다면,
계속 pointer 사용. ( 섞어서 사용하지 않음. )
 
(언리얼)
#define OUT => 가독성 차이 => 바뀔 수도 있다는 힌트!!
void ChangeInfo( OUT StatInfo& info)

 

 


 

본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다.

 

 

'프로그래밍 > C++' 카테고리의 다른 글

#33. 포인터 & 배열  (0) 2022.07.19
#32. 배열기초  (0) 2022.07.19
#30. 참조 기초  (0) 2022.07.19
#29. 포인터 연산  (0) 2022.07.19
#28. 포인터 기초  (0) 2022.07.19