minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️React (0)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (12)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • 19년식그램램장착
  • 19년식그램SSD장착
  • AI배워야하나
  • kafka구축
  • 그램풀스팩업그레이드
  • 인공지능개발자
  • NextJSSwagger
  • 구조체매개변수
  • 리눅스파티션
  • 이것이C++이다책참고
  • mfc
  • API문서정리
  • GSLB
  • 그램업그레이드
  • 티스토리폰트배경색없애기
  • SpringBootSwagger
  • 구조체배열포인터
  • 이차원구조체배열포인터
  • hello테마
  • OpenGL회전

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️C++

[C++] 참조형식 멤버변수 초기화 (생성자초기화목록 이용)

2023. 9. 17. 22:27

참조형식 멤버변수 초기화

- 참조 형식으로 선언된 멤버변수는 반드시 선언과 동시에 초기화해야한다.

- 그러므로 반드시 생성자 초기화 목록을 이용해 초기화해야한다.

class CTest
{
  
public:
  CTest(int &rParam) : m_nData(rParam) {};
  int GetData(void) {return m_nData;}
private:
  int &m_nData;
};


int main(){
  int a = 10;
  CTest t(a);
  
  cout << t.GetData() << endl;  //10출력
  
  a = 20;  // 참조 원본인 a의 값이 수정되었다.
  cout << t.GetData() << endl;  //20출력
 
  return 0;   
}

 

참조형식 멤버변수를 생성자 초기화 목록을 사용하지 않고 초기화하려고 할때.

CRefTest(int &rParam) {m_nData = rParam;};

- '='는 단순 대입연산자이다.

- 선언 및 정의가 아닌. 이미 선언된 인스턴스를 이용해서 연산하는 것에 불과하다.

- 초기화하지 않고 사용했기 때문에 컴파일 오류가 발생한다.

 

CRefTest(int rParam) : m_nData(rParam) {};  //m_nData를 출력해보면 쓰레기값이 출력된다.
//rParam은 생성자함수가 끝나고 소멸한다.

- 참조자가 가리키는 원본이 이미 삭제되었기 때문에 쓰레기값이 출력된다. 

- 생성자의 매개변수를 참조형식이 아니라 int rParam이라고 작성했기때문.

- 함수의 매개변수는 함수 내부의 자동 변수와 같으므로 함수가 반환될 때 매개변수는 소멸된다. 

- 따라서 m_nData(rParam)라는 코드는 결국 사라질 대상에 대한 참조자가 초기화되는 결과를 초래. (주소값을 저장한 것도 아니라서 매개변수가 사라지지 않았어도 잘못된 것임)

 

*참조자 특징: 가리키는 대상을 만드시 규정해야한다. 중간에 원본 대상을 바꿀 수 없다. 

 

 

더보기
 

Visual Studio C++ 사전

c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++ [C++] Hello world 출력해보기 [C++] 여러 변수 출력하기 [C++] Visual Studio 에서 추가로 사용

genius-duck-coding-story.tistory.com

 

 

 

'◼️C++' 카테고리의 다른 글

[C++] 명시적 디폴트 생성자  (0) 2023.09.17
[C++] 생성자 다중정의  (0) 2023.09.17
[C++] 동적 객체의 생성과 소멸  (0) 2023.09.17
[C++] 생성자와 소멸자  (0) 2023.09.17
[C++] 클래스 접근 제어 지시자  (0) 2023.09.17

    티스토리툴바