3장 임시객체,이동 생성자 _c++

hans·2023년 7월 28일
0

c++ 먹어보자

목록 보기
3/6
post-thumbnail

목차

  • 임시객체
  • r참조
  • 이동 생성자

1.임시객체

1-1.임시 객체란?

임시 객체는 식별자가 부여되지 않은 객체를 의미한다
이름이 없는 객체로서 코드 형태에서 직접적으로 확인 하기는 어렵다
간단한 그림을 통해 임시 객체를 알아보자

int a를 선언과 동시에 초기화 하는 단순한 상황이다
임시객체를 알기 전까지 저 과정에서 int형 인스턴스는 a,3,4 총3개이다
하지만 실제로 더하는 과정에서 3,4에 연산 결과인 7이 임시객체로 생성된다.

1_2.임시객체의 생명주기

위에 그림에서 임시객체 7은 언제 생성되고 소멸 될까?
3+4 연산이 진행될때 생성되고 7을 a에 대입하고 소멸할 것이다
생성될때 호출 연산의 끝에서 소멸을 한다.

1_3.임시객체의 문제점

임시객체가 생성되면 내가 모르는 인스턴스가 생성 되는것이다
인스턴스가 생성이 되면 당연히 메모리와 성능에도 영향을 주게된다

임시객체를 고려하지 않고 설계를 한다면 위에 상황은 분명 60MB다
하지만 임시객체로 인해 최대 80MB까지 올라가게 된다

2.R_vlue 참조

이러한 문제를 해결하는 방법으로 r_vlue참조가 있다
형식앞에 &&붙여서 참조하는 형태로 상수형 참조이다
그렇기에 연산의 결과값을 참조하기 위해 사용한다.

예를 들어 위에 그림에서 T_1을 참조해서 연산을 진행한다면 임시객체 T_1을 생성할 필요없이
프로그래밍을 만들수 있다

2_2 r-vlue참조 사용하기

r참조는 연산에 따라 생성된 임시객체 입니다 라고 생각하자
우리가 앞서 매개변수 형식이 클래스을 경우 참조형식을 활용하라고 한것처럼 외우자

    int&& data = 3 + 4;
	int data2 = 3 + 4;

	cout << data << endl;
	cout << data2 << endl;

출력결과
7
7

int&& data =7 이랑 다를게 없다 하지만 클래스를 매개변수로 할경우 r참조를 활용하면
불필요한 임시객체를 줄일수 있다
이동 생성자를 통해 더욱 알아보자

3.이동 생성자

1_1 이동생성자란?

우리가 복사생성자를 선언할떄 매개변수에 l참조 형식으로 &을 붙여서 선언했다면
이동생성자는 &&을 붙여 r참조를 통해 선언한다.
복사 생성자가 클래스 멤버 안에 포인터의 값 자체를 복사하는 생성자라면
이동 생성자는 매개변수 클래스의 포인터의 주소만 복사하는 방식으로 메모리를 절약한다

profile
방구석여포

2개의 댓글

comment-user-thumbnail
2023년 7월 28일

좋은 글 감사합니다. 자주 올게요 :)

1개의 답글

관련 채용 정보