-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
생성자의 형태에 따른 출력값의 차이
21.11.25 10:06 작성 조회수 153
0
그 생성자 표현방식은 2가지가 있잖아요
using namespace std;
class Test
{
int m_value;
int m_ref;
public:
Test(const int& value)
{
Test(10, value);
}
Test(const int& ref,const int& value)
{
m_ref = ref;
m_value = value;
}
const Test& print()
{
cout << m_value << " " << m_ref << endl;
cout << (int) & m_value << endl;
return *this;
}
};
int main()
{
Test(10).print();
}
이 전체코드에서
위의
Test(const int& value)
{
Test(10, value);
}
이 부분은
Test(const int& value):
Test(10, value)
{}
이거랑 같잖아요
근데 아래코드는 정상작동하는 반면에 위의 코드는
이상한 출력값이 나옵니다. 왜이런걸까요?
답변을 작성해보세요.
4
안소
2021.11.25
Test(const int& value)
{
Test(10, value);
}
이건 위임생성자를 호출한 것이 아닙니다. 익명 객체를 생성하는 것입니다. (main 에 있는 친구처럼요)
Test(const int& value):
Test(10, value)
{}
이거랑 다른 것입니다.
전자는 { } 중괄호 내에서 생성자가 호출되었으며 (함수 내에서 처리하는 것과 같음) "익명객체"를 생성하는 과정인 것입니다. 익명 객체이기 때문에 main 에서 호출한 객체와는 무관한, 전혀 다른 "타인 객체"구요. 그래서 main 에서의 객체는 m_value, m_ref 가 초기화되지 않았습니다. 초기화가 된건 main 객체 생성자 내에서 잠깐 살았다가 없어지는 익명객체의 멤버들이구요.
후자는 "본인"의 위임 생성자가 호출된 것이기에 멤버들이 잘 초기화된거구요. 생성자 초기화 목록의 특별한 문법같은 경우라고 생각하시면 될 것 같습니다.
답변 1