기초적인 질문 같아 죄송합니다.
c++에서 생성자에 init 관련된 코드들을 넣으려고하는데.. 다른 함수도 호출하고 그럽니다.
처음 한번만 실행하는 것이니 간단하지 않아도 될듯 하고, 왠지 생성자라고 하니 최대한 간단하게
작성하는게 좋을 것도 같고 헤깔려서 질문드려봅니다..
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐? 그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
-----------------------
내가 쓰는 글은 틀릴 수 있습니다.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
단순히 멤버변수만 초기화를 하는 일은 별로 없을 듯 합니다.
보통은 생성자에서 멤버변수를 초기화하시고 다른 초기화 처리(화일 생성이나 소켓생성등)는 별도의 함수를 만드시는 것이 좋습니다.
생성자가 리턴값을 넘기지 못하므로 initailize(), init(), run_init()등의 함수을 객체 생성이후에 호출하시고 리턴값을 검사해서 초기화에 이상이 없는지 확인해 보세요.
(함수명은 인식하기 쉬는 것으로 정해시고 다른 클래스와 동일성을 가지면 더욱 좋습니다.)
멤버 변수은 생성자에서 초기화를 하고, 다른 검사나 클래스의 생성 초기화등은 자신의 생성자 안이 아닌 별도의 함수에서 리턴값을 받을 수 있게 하는 것이 규모가 큰 프로젝트에서 유지보수가 쉽습니다.
보통은 개발자들이 코딩 규약에서 생성자/소멸자의 기능 정의와 초기화에 대해 설정하기 나름이지만,
저의 경우는 쓰레드 생성과 공유 메모리를 사용할 때는 이렇게 하는 것이 편하더군요. 이미 코딩 규약이 있어서 그 내용대로 구현을 했습니다만, 프로젝트의 특성에 따라 조금씩 변화를 가하는 것이 좋다고 생각합니다.
왠만하시면 class가
왠만하시면 class가 가지고 있는 모든 맴버 변수를 초기화 하시는것이 좋습니다.
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐? 그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
-----------------------
내가 쓰는 글은 틀릴 수 있습니다.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
초기화에 대한 의견
단순히 멤버변수만 초기화를 하는 일은 별로 없을 듯 합니다.
보통은 생성자에서 멤버변수를 초기화하시고 다른 초기화 처리(화일 생성이나 소켓생성등)는 별도의 함수를 만드시는 것이 좋습니다.
생성자가 리턴값을 넘기지 못하므로 initailize(), init(), run_init()등의 함수을 객체 생성이후에 호출하시고 리턴값을 검사해서 초기화에 이상이 없는지 확인해 보세요.
(함수명은 인식하기 쉬는 것으로 정해시고 다른 클래스와 동일성을 가지면 더욱 좋습니다.)
생성한 후라는
생성한 후라는 말씀은 별도로 초기화 함수를 호출해 주어야 한다는 것인데,
차라리 생성자 내에서 상태를 설정한 다음에 그것을 검사케 하는 쪽이 낫지 않을까요?
fstream처럼 말입니다.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
글에도 적혀 있듯이
멤버 변수은 생성자에서 초기화를 하고, 다른 검사나 클래스의 생성 초기화등은 자신의 생성자 안이 아닌 별도의 함수에서 리턴값을 받을 수 있게 하는 것이 규모가 큰 프로젝트에서 유지보수가 쉽습니다.
보통은 개발자들이 코딩 규약에서 생성자/소멸자의 기능 정의와 초기화에 대해 설정하기 나름이지만,
저의 경우는 쓰레드 생성과 공유 메모리를 사용할 때는 이렇게 하는 것이 편하더군요. 이미 코딩 규약이 있어서 그 내용대로 구현을 했습니다만, 프로젝트의 특성에 따라 조금씩 변화를 가하는 것이 좋다고 생각합니다.
RAII을 고려해서
RAII을 고려해서 설계하시면 될 것 같습니다.
홍민희 (VLAAH, LangDev)
예외처리 옵션에 따라..
프로젝트에서 C++ 예외처리를 사용할 생각이면 RAII를 고려하여 생성자에서 최대한 처리를 하고,
C++ 예외처리를 안쓸 생각이면 별도의 초기화 함수로 빼는 식으로 하는 게 좋을 듯
댓글 달기