[c++] call by value vs. call by reference

숭글·2023년 1월 5일
0
post-custom-banner

Call by value VS Call by reference

call by value

  • 값을 전달할 때 값을 복사해서 전달한다.
    • 클래스를 전달할 때 복사 생성자를 호출하여 생성하기 때문에 복사 생생성자를 구현해야한다.
  • 전달 후엔 전달해준 원본 개체와 다른 개체가 되어(클래스의 경우 복사생성자를 거쳐 새로운 객체를 생성한다.) 사용되기 때문에 함수 내부에서 값을 변경해도 원본 개체엔 영향을 끼치지 않는다.

call by reference

  • 원본 개체 자체를 전달한다.
    - 복사를 하지않기 때문에 call by value 방식보다 빠르다.
    • const(상수화)가 붙어 내부 값을 바꿀 수 없음에도 래퍼런스로 전달 or 반환받는 경우가 있다.
  • 함수 내부에서 값을 변경하는 경우 원본 개체가 변경되어 함수 외부로 나왔을 때도 값이 바껴있게 된다.

Example

class Dog{
	public :
		Dog(std::string name): _name(name){};
		Dog(Dog &obj){
			std::cout << "*copy constructor*" << std::endl;
			_name = obj._name;
		}  // copy constuctor
		std::string getName(){ return (_name); }

	private :
		std::string _name;
};

void passingWithReference(Dog &dog){
	std::cout << dog.getName() << std::endl;
}

void passingWithValue(Dog dog){
	std::cout << dog.getName() << std::endl;
}

int main(){
	Dog dog("ddung");

	std::cout << "call by value" << std::endl;
	passingWithValue(dog);
	std::cout << "call by reference" << std::endl;
	passingWithReference(dog);

	return (0);
}

output >

call by value
*copy constructor*
ddung
call by reference
ddung
profile
Hi!😁 I'm Soongle. Welcome to my Velog!!!
post-custom-banner

0개의 댓글