c++ 생성자에서 패러미터 유효성 체크에 관한 질문입니다.
글쓴이: hwayak / 작성시간: 화, 2010/07/13 - 1:49오후
c++ 생성자로 넘겨진 패러미터의 유효성을 체크해서, 유효하지 않으면 객체를 생성시키지 못하게 하고 싶을 땐 어떤 기법을 사용하나요?
예를 들어, 아래와 같은 코드가 있다고 할 때,
class A { public: A(char *c); }
생성자 A(char *c)를 구현할 때, c의 NULL체크를 해서 NULL이면 객체를 생성하지 못하게 하고 싶습니다.
생성자에서 예외를 발생시키는 것은 좋지 않다는 걸 어디서 들었던거 같아서 그렇게는 못하겠고요.
아니면 생성자 자체를 private 막은 다음, 객체를 생성해서 리턴해내는 함수를 만들면 될거 같기도 한데...
뭔가 이런 경우에 널리 알려진 좋은 방법이 있을 거 같아서, 이렇게 질문 드립니다.
Forums:
적으신 방법은
적으신 방법은 일종의 factory 패턴으로 좋은 방법이라고 생각합니다.
그외에는 유효하게 생성된객체인지 아닌지를 알려주는멤버함수를 작성해서, 생성후 체크하게 할수도 있겠구요..
factory패턴이라고 해도, 동적할당으로 반환하기보다는, 마찬가지로 유효성체크 함수를 넣어서 돌려받은 객체에 대해 체크하도록 하는게 좋아보입니다.
객체의 생성자체를 막고 싶다면 애시당초 NULL이 될수 없는 인자(레퍼런스 혹은 다른 char*를 대체할 클래스)를 받도록 하는수밖에 없어보입니다.
레퍼런스로 받으면
레퍼런스로 받으면 안되나요?
생각해보니 그래도 똑같군요;;
------------------------------
How many legs does a dog have?
------------------------------
How many legs does a dog have?
예외를 던지면 안되는 것은 소멸자입니다.
생성자야 말로 예외를 던지는 가장 흔한 예입니다.
effective c++ 항목 8을 읽어보세요
널체크를 강요하고 싶은 경우에는 윗분 말씀처럼 레퍼런스로 받는게 정석입니다 :)
:)
예외를 던져도 되고요
예외 던져도 되고요 레퍼런스로 받아도 되긴 하지만 이건 char*가 char형 *보다 char배열인 문자열을 받고 싶은 경우는 해당이 되지 않네요...
댓글 달기