class ABC
{
int *m_N;
int m_size;
public:
ABC()
{
m_N = new int[100];
m_size = 100;
}
ABC(int nSize) {
m_N = new int[nSize];
m_size = nSize;
printf("%x\n", this);
}
~ABC()
{
delete[] m_N;
}
ABC(const ABC& rhs)
{
m_size = rhs.m_size;
m_N = new int[m_size];
memcpy(m_N, rhs.m_N, sizeof(int)*m_size);
}
ABC(ABC&& rhs)
{
m_size = rhs.m_size;
m_N = rhs.m_N;
rhs.m_N = nullptr;
}
};
int main()
{
ABC aa = ABC(10000);
return 0;
}
어셈을 어느정도라도 볼줄 안다면.. ㅠㅠ 알수있을꺼 같은데 ㅠ 어셈을 잘 볼줄몰라서.. ㅠㅠ(진짜 공부해야할듯)
ABC aa = ABC(10000);
이렇게 하면 저는
ABC aa의 생성자 호출 , ABC(10000)생성자 호출, ABC aa = ABC(10000);에서 move constructor 호출
이렇게 될줄알았는데 실제로는 아래처럼되더군여"ABC(10000)의 생성자 호출" 이게 끝입니다.
ABC aa의 생성자가 호출이 안되어서 move constructor이 호출안된거라면, 이해가 가지만 문제는 ABC aa의 생성자가 호출이 되지 않는 이유를 모르겠습니다.
어떠한 대입연산 copy constructor move constructor 도 없는거 같은데 aa가 ABC(10000);의 값을 가지게 되는지도 궁금합니다.
질문 읽어주셔서 감사합니다~