함수에 값을 넣을때 3가지 방법이 있다

  1. Pass by value / pointer

    func (param x) 또는 func (param *x)

  2. Pass by reference

    func (param& x)

이 두 방법 모두 자료구조체를 받아올 수 있다. 어떤 차이가 있고, 언제 어떤걸 쓰는게 더 효율적일까?

1. Pass by pointer value


Pass by pointer가 pass by reference에 비해 갖는 장점 중 하나는 nullptr가 들어올 수 있다는 것이다. 이는 즉 아래와 같은 방식으로 구현이 가능하다는 것이다.

bool trackObject(Target* object)
{
	if (object == nullptr)
		return false;

	...
}

int main()
{
	while (camera.isOpened())
	{
		auto img = camera.readImage();
		auto object = detectObject(img);

		if (trackObject(object));
			saveTrackingData();
	}
}

2. Pass by reference


Pass by reference가 Pass by pointer에 비해 가지는 장점 중 하나는 modification을 허용/금지하는 lock을 걸기가 쉽다는 것이다.

Data& x 를 사용하면 바로 modification을 할 수 있고,

const Data& x 를 사용하면 modification을 금지할 수 있다.