c++ 에서 생성자의 초기화 리스트의 장점?
글쓴이: ssehoony / 작성시간: 일, 2005/11/27 - 7:59오후
초기화 리시트라고 하는게 맞는 용어인지는 모르겠군요.
제가 의도한 바는 클래스 생성자 뒤에 멤버변수 값을 초기화 하는 리스트를 넣는 문법을 의미하는 건데요.
레퍼런스나 const 변수에 대한 값을 설정하기 위해서는 그렇게 할 수 밖에 없는 것은 알겠는데요.
그 외의 변수는 그렇게 할 필요가 있나요?
그런 변수도 모조리 그렇게 초기화 하는 경우는 많이 보곤 합니다.
그게 뭔가 장점이 있어서 그런것이 아닐까 하는 궁금이 생겨서 이렇게 질문 드립니다.
그냥 단순이 코딩 스타일인가요?
제가 보긴엔 가독성이 떨어지는 듯 한데......
Forums:
http://zho.pe.kr/view.html?file_name=doc
http://zho.pe.kr/view.html?file_name=doc/cpp.txt
이것 말씀이신가요?
글의 요지가, "생성자를 최대한 작게 만드는 대신 초기화리스트를 이용해라
글의 요지가, "생성자를 최대한 작게 만드는 대신 초기화리스트를 이용해라" 인것 같네요.
이건 무슨말인가요?
인스턴스 생성시 할당되고 생성자로 대입연산을 통해 대입하는거랑
인스턴스 생성시 할당되고 초기화리스트로 대입하는거랑.. 똑같은것 아닌가요?
저도 질문자처럼 초기화리스트보다는 생성자로 초기화하는게 훨씬 나아보입니다.
초기화리스트는 포함객체초기화, 참조초기화, 상수초기화 이외에는 별로 사용해본적도 없고요.
poklog at http://poksion.cafe24.com/poklog/
[quote="pok"][b]인스턴스 생성시 할당되고 생성자로 대입연산을
다른 것으로 알고 있습니다. More Effective C++ 이던가 Effective C++ 두권중 어딘가에서 본 거 같은데 아마 다음분께서 친절히 설명해주실 겁니다. 8)
dasomoli의 블로그(http://dasomoli.org)
dasomoli = DasomOLI = Dasom + DOLI = 다솜돌이
다솜 = 사랑하옴의 옛 고어.
Developer! ubuntu-ko! 다솜돌이 정석
위에 손님이 쓰신 것을 다시 풀어서 써보겠습니다.기본 타입들 (i
위에 손님이 쓰신 것을 다시 풀어서 써보겠습니다.
기본 타입들 (int나 long같은..)의 경우는 초기화 리스트를 사용하는 것이나, 생성자 안에서 대입을 하는 것이나 차이가 없습니다.
하지만 클래스 객체를 사용하는 경우는 조금 이야기가 달라집니다.
의 경우는 _Info라는 객체가 _Info(Info& info)의 생성자로 호출이 됩니다.
의 경우는 _Info 객체가 _Info()의 기본 생성자로 초기화 된 후, 다시 대입 연산자(=)로 할당이 됩니다. 저도 이 내용이 MEC++던가, EC++던가 정확히 기억이 나지는 않네요.
https://wiki.ubuntu.com/KoreanTeam
[quote="pok"][b]인스턴스 생성시 할당되고 생성자로 대입연산을
같지 않습니다. 생성과 대입의 차이에 대해서는 너무 얘기가 길어질 듯하니 생략하고,
위에서 인용된 글의 내용은 효율의 관점에서 대입보다 초기화 리스트를 쓰는 것이
낫다는 대표적인 이유입니다. 즉 대입을 사용한다면 디폴트 생성자, 대입 연산자의
2번의 함수 호출인 반면 초기화 리스트를 쓰면 해당 생성자 한 번의 호출로 초기화가
완료된다는 것입니다. 아마 대부분의 경우 그 차이는 그리 크지 않으리라 보지만
적어도 초기화 리스트가 대입보다 비효율적이지는 않다는 점은 확실합니다.
예로 드신 경우 이외에도 초기화 리스트를 써야만 하는 예를 들면
이 코드는 컴파일 에러입니다. 초기화 리스트가 없다는 것은 멤버의 디폴트 생성자를
통하여 초기화하겠다는 것인데, S에는 그것이 없기 때문입니다. S를 상속받는
클래스에서도 같은 얘기를 할 수 있고요.
물론 가독성 측면에서 초기화 리스트보다 대입이 더 좋은 경우도 있습니다. 예를 들어
int형 멤버를 다수 갖고 있고 그것을 모두 0으로 초기화하고 싶을 때 대입을 쓴 코드가
읽기 좋습니다. 또 배열 멤버에는 초기화 리스트를 사용할 수 없고요.
요약하면 가능한 한 대입보다는 초기화 리스트를 사용하라는 것이 권장되는 스타일입니다.
추가로 초기화 리스트가 더 예외에 안전하다고 하더군요...
추가로 초기화 리스트가 더 예외에 안전하다고 하더군요...
off topic 성이 될 수 있어 조심스럽지만, [b]EC++[/b]
off topic 성이 될 수 있어 조심스럽지만, EC++ 이 맞습니다 :-)
--
Passion is like genius; a miracle.
댓글 달기