return 값으로 임시객체를 생성시 생성자가 호출이 안되나요??

조회수 1167회
#include <iostream>

class Point
{
    int x, y;
public:
    Point(int a = 0, int b = 0) : x(a), y(b) {std::cout << "생성자 실행"<< std::endl;}
    friend Point operator+(const Point& p1, const Point& p2);
};

Point operator+(const Point& p1, const Point& p2)
{
    return Point(p1.x+p2.x, p1.y+p2.y);
}

int main()
{
    Point(1,1);
    Point p1(1,1);
    Point p2(2,2);
    Point p3 = p1+p1;
}

함수 실행하면

  1. 메인함수 첫 줄에서 임시객체 생성,
  2. p1 생성,
  3. p2 생성,
  4. +operator 함수에서 리턴값으로 임시객체 생성
  5. p3 생성

총 5번의 "생성자 실행" 글이 나오는 줄 알았는데 4번 밖에 안나오더군요...

메인함수 첫 줄을 지우면 총 3번의 "생성자 실행" 글이 나오는 걸로 봐서 +operator에서 리턴값으로 생성된 임시객체에서 생성자가 호출이 안된것 같은데 제 생각이 맞나요? 생성자가 없이 객체 하나가 생성될 수도 있나요..??

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 늦어서 도움이 안되겠지만

    4 에서 임시객체가 생성되었기 때문에

    저 경우 operator = 을 손봐야 합니다. 대입연산자가 발동해요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)