class AAA
{
private:
 int num;
public:
 AAA() : num(0) {}
 AAA& CreateInitObj(int n) const
 {
  AAA* ptr=new AAA(n);
  return *ptr;
 }
 void ShowNum() const { cout<<num<<endl;}
private:
 AAA(int n) : num(n) {}
};

int main(void)
{
 AAA base;
 base.ShowNum();

 AAA &obj1=base.CreateInitObj(3);
 obj1.ShowNum();
.
.
.
.
}

궁금한게 뭐냐면 진하게 칠한 부분에서 반환형이 참조자인데 이걸 참조자로 다시 참조한단 말이야. 이게 이해가 안돼
breakpoint 찍어서 ptr이 뭐가 반환되나 보니까 ptr은 주소값이고.. *ptr은 num=3이 있는데거든..
그럼 *ptr에서 참조형태로 반환하면 주소값이 가는걸까 싶어서 base.CreateInitObj(3)도 찍어봤어
근데 이건 *ptr처럼 num=3이 나오는거야.
그렇다면 참조형태로 반환한다는 의미는 뭘까?
이해가 안가서 두번째 진한 부분에서 &obj1을 obj1로 바꿔봤어. 근데도 잘 되더라구.
또 이상해서 반환형태를 그냥 객체로만 해봤어. AAA CreateInitObj(int n) 요렇게..그렇게 해도 잘되 ㅡㅡ;;

도대체 이것들 차이점이 뭐지?
한시간째 생각하고 있는데 정리가 안되서 프로그래밍 천재가 많다는 이곳에 왔어. 해결해줘 ㅜㅜ