• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

안녕하세요. get함수와 관련해서 질문드립니다.

21.08.31 03:00 작성 조회수 174

0

안녕하세요. get함수 관련해서 질문드립니다.

수업에서도 get 함수가 많이 사용하고 있잖아요. 

강사님께서는 const와 레퍼런스 타입으로 사용할때고 있고, 그냥 value로 반환하시기도 하시던데,

1.). 저는 이런식으로 get함수를 사용하고 있는 데 오버인가요? 아니면 잘 사용하고 있는건가요? 

const int& GetFindRoad() const { return SelectRoad; }

2) 더불어 수업이랑 벗어난 내용입니다만,,, Effective c++ 책을 보면 레퍼런스 타입으로 객체를 리턴하게 되면  임시객체가 생성되고, 

생명주기가 길어져서 되도록 피하라고 하는데, 그러면 복사되는 객체를 반환해야 효율이 좋은것일까요?

수업외 질문해서 죄송합니다

답변 2

·

답변을 작성해보세요.

0

음 지금 책이 없어서 정확히 어떤 의미인지 저도 잘 모르겠네요.
그리고 Effective C++은 오래된 책이라 가끔 안 맞는 내용이 있을 수도 있습니다.
(컴파일러가 좋아져서 최적화를 한다거나)

궁금할 때는 그냥 구현해서 까보는게 제일 정확한데
적어주신 코드를 간단하게 구현해서 살펴보면
참조 자체는 포인터와 마찬가지로
그냥 주소를 전달하는 방식으로 되어 있음을 확인할 수 있습니다.

책에서는 다른 의미를 말한 것 같은데 저도 잘 모르겠네요.
그리고 Point와 같이 구조체 크기가 크지 않은 경우라면 복사를 해도 무방하지만
Point가 2000 바이트짜리라면 이런 부분에서 매우 크게 차이날 수도 있습니다.
(포인터 or 참조를 이용해야죠)

김원태님의 프로필

김원태

질문자

2021.08.31

감사합니다!

0

1)
const Knight& 와 같은 형태이고 Knight 가 복사 비용이 크다면 말이 되지만,
int 같은 경우에는 그냥 int 복사하는게 가장 효율적인데
굳이 const int&을 할 이유가 없습니다.

2)
복사되는 객체를 반환하는데 하필 그 객체 복사 비용이 크다면 당연히 매우 효율이 안 좋습니다.
그런데 [레퍼런스 타입으로 객체를 리턴하면 임시 객체가 생성된다]는 구절에서
정확히 예제가 어떻게 나와 있나요? 어떤 상황을 말하는건지 잘 모르겠네요.

김원태님의 프로필

김원태

질문자

2021.08.31

늦은 시간에 답변 달아주셔서 감사합니다. 200페이지에 3번째 줄인데,  제가 잘못 이해했을 수도 있습니다. 

//const 레퍼런스 타입 이 들어가 있는 클래스

class Rect

{

 ...

const Point &upperLeft() const {return pData->ulhc;}

}

class GUIObject {....};

const Rect

boundingBox(const GUIObject &obj);

이 상태에서 어떤 사용자가 이함수를 사용한다면?

GUIObject *pgo;

...

const Point *pUpperLeft = &(boundingBox(*pgo).upperLeft());

에서 바운딩박스 함수를 호출하면 Rectangle 임시 객체가 새로 만들어진다고 적혀져 있더라고요.