• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

OnClicked clicked = new OnClicked(TestDelegate) 에관해서 질문..

21.01.27 14:14 작성 조회수 169

0

c언어를 조금 배운 상태에서 강의를 듣고있습니다.

참조 형식라고 하여서 clicked 변수에 함수 주소를 받는 포인터로 대입을 해서 생각하고 있는데 

new 생성자로 인스턴스를 만들면 새로 메모리를 할당해서 그 주소를 받는다고 이해해왔습니다.

그렇다면 OnClicked clicked 는 TestDelegate의 주소 (함수 원형)을 받는것이 아니라 새로 인스턴스로 생성된 TestDelegate의 복사본의 주소를 받게되는 것인가요?

제대로 질문을 했는지 모르겟군요.. 

답변해주시면 감사하겠습니다.

답변 1

답변을 작성해보세요.

2

delegate, 혹은 다른 언어로 구현하는 콜백 기능들은
C로 치면 함수 포인터(혹은 함수 객체)와 유사합니다.
따라서 OnClicked 내부적으로 TestDelegate 함수의 주소를 들고 있는 것이고,
new OnClicked을 했을 때는 TestDelegate를 복사하는 것이 아니라
단지 그 함수 주소를 들고 있을 뿐입니다.

class OnClicked
{
   OnClicked(TestDelegate func)
  {
     _func = func;
  }
    TestDelegate _func;
}

굳이 비유하자면 위와 같은 느낌입니다.
물론 delegate에는 훨씬 더 많은 기능이 있으니 저렇게 단순하진 않겠죠.