본문 바로가기

C++/C++ 문법

[C++] 객체의 전달 (const&)

728x90
반응형

객체의 전달

 

- 객체를 그대로 파라미터로 사용하는 경우

전달방식에 있어서 원본을 사용하는 것이 아닌 복사된 값을 사용하므로 임시 복사본이 생성된다.

 

 

 

 

- 참조연산자(&)를 사용하여 파라미터로 사용하는 경우

실제 data의 원본을 가지고 사용하므로 복사 생성자를 호출하는 비용이 없다.

하지만 data 원본이므로 함수 내에서 값이 변경되는 리스크가 존재하기 때문에 경우에 따라서 사용해야 한다.

이 경우에 한 개의 객체가 존재하며 2개의 이름을 갖게 된다. (함수 인자명, 원본 객체명)

 

#include <iostream>

class TestClass {
private:
	int a = 10;
	int b = 15;
public:
	int plus () {
		a++;
		b++;
		return a + b;
	}
};

void GetPlusValue(TestClass &test)
{
	std::cout << test.plus() << std::endl;
}

int main()
{
	TestClass test1;
	GetPlusValue(test1);
	GetPlusValue(test1);
	return 0;
}

 

따라서 위 코드는 test1의 원본이 함수로 전달되므로 함수가 종료되어도 증가한 값이 유지되는 것을 확인할 수 있다.

 

 

 

 

 

 

- const 참조를 파라미터로 사용하는 경우

const 사용으로 함수 안에서 값이 변경되는 것을 허용하지 않는다.

또한 실제 data 원본이므로 복사 생성자도 호출되지 않는다.

따라서 객체의 값이 변경되는 것을 원하지 않을 경우에는 const 참조를 주로 사용한다.

 

 

class TestClass {
private:
	int a = 10;
	int b = 15;
public:
	int plus () const {
		return a + b;
	}
};

void GetPlusValue(const TestClass &test)
{
	int num;
	num = test.plus();
}

 

이때 plus 함수에 const 선언을 추가해주지 않으면 컴파일이 허용되지 않는다.

GetPlusValue 함수의 매개변수에 const 선언이 추가되어 있으므로 const 선언이 없는 함수는 호출할 수 없기 때문이다.

728x90
반응형