함수에 값을 넣을때 3가지 방법이 있다
Pass by value / pointer
func (param x)
또는 func (param *x)
Pass by reference
func (param& x)
이 두 방법 모두 자료구조체를 받아올 수 있다. 어떤 차이가 있고, 언제 어떤걸 쓰는게 더 효율적일까?
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();
}
}
Pass by reference가 Pass by pointer에 비해 가지는 장점 중 하나는 modification을 허용/금지하는 lock을 걸기가 쉽다는 것이다.
Data& x
를 사용하면 바로 modification을 할 수 있고,
const Data& x
를 사용하면 modification을 금지할 수 있다.