c++ 이동생성자 호출 시점에 대해 질문합니다. 호출시점인것 같은데 이동 생성자가 생성이 안되네여:(
조회수 1682회
작성 코드는 다음과 같습니다.
#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 로 대입하는 과정에서 이동생성자가 생성되어야 할것 같은데 생성이 안됩니다. 왜그런거죠??
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
a = b + c
에서b+c
한 결과를a
에assign
할 때 복사생성자(Copy Constructor)가 호출(해야 하는데 왜 안하는 것인지)에 대한 질문인것 같은데 맞나요?그렇다면 비슷한 질문이 #1931과 #2227에도 있었습니다. 한번 참고해보세요.
요약하면 어떤 함수의
return
값을 다른 변수에assign
하는 것에 대한 최적화와 관련있습니다.- 그 b+c의 임시결과에 대한 r-value참조값에 대한 생성자를 질문한것 입니다. 최적화관련해서 다시한번 찾아봐야겠군요 :) 알 수 없는 사용자 2016.6.17 00:08
댓글 입력