c++ 이동생성자 호출 시점에 대해 질문합니다. 호출시점인것 같은데 이동 생성자가 생성이 안되네여:(


작성 코드는 다음과 같습니다.

#include <iostream>

using namespace std;

class CMyData
{
public:
    CMyData(int Param):m_nData(Param)
    {
        cout << "CMyData(int)" << endl;
    }

    CMyData(const CMyData &rhs): m_nData(rhs.m_nData)
    {
        cout << "CMyData( const CMyData & ) " << endl;
    }

    CMyData(const CMyData &&rhs) : m_nData(rhs.m_nData)
    {
        cout << "CMyData(const CMyData && ) " << endl;
    }

    ~CMyData()
    {
       cout << "~CMyData()" << endl;
    }

    operator int() { return m_nData; }


    CMyData operator+(const CMyData & rhs)
    {
        CMyData result(0);

        result.m_nData = this->m_nData + rhs.m_nData;

        return result;
    }

    CMyData& operator=( const CMyData & rhs)
    {
        m_nData = rhs.m_nData;

        return *this;
    }

private:
    int m_nData = 0;

};

int main(void)
{
    cout << "***Begin***" << endl;

    CMyData a(0), b(3), c(4);

    a = b + c;      /// 바로 이시점에서 입니다.

    cout << a << endl;

    cout << "*** end *** " << endl;

    return 0;
}

b+c 연산후 a 로 대입하는 과정에서 이동생성자가 생성되어야 할것 같은데 생성이 안됩니다. 왜그런거죠??

  • 2016년 06월 17일에 수정됨
    시원한 날만 일하자
  • 2016년 06월 15일에 작성됨

조회수 169


1 답변


a = b + c 에서 b+c 한 결과를 aassign할 때 복사생성자(Copy Constructor)가 호출(해야 하는데 왜 안하는 것인지)에 대한 질문인것 같은데 맞나요?

그렇다면 비슷한 질문이 #1931#2227에도 있었습니다. 한번 참고해보세요.

요약하면 어떤 함수의 return값을 다른 변수에 assign하는 것에 대한 최적화와 관련있습니다.

  • 2016년 06월 16일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 그 b+c의 임시결과에 대한 r-value참조값에 대한 생성자를 질문한것 입니다. 최적화관련해서 다시한번 찾아봐야겠군요 :)    walli   2016.6.17 00:08     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close