template와 관련해서..
글쓴이: gugudan / 작성시간: 월, 2005/01/10 - 7:49오후
template에서
return값을
어떠한 클래스 값을 리턴할려고 할때
클래스 안에서
T get(int num)
{
Node *t;
int idx;
T return_t;
머 이런식으로 작성을 했는데..
이 함수가 끝날때쯤
소멸자가 호출이 되더군요..
이 소멸자가 호출되지 않게 할 수 없나요?
그리고 위의 get 메서드에서
return NULL을 했더니..
에러가 나오는군요..
NULL을 리턴하고 싶은데
어떻게 되지 않는지요?
Forums:
포인터를 사용하셔야 될것 같네요T* get(int num);또
포인터를 사용하셔야 될것 같네요
T* get(int num);
또는
auto_ptr<T> get(int num)
을 사용하셔도 될것 같네요.
-- 아쉬운 하루 되세요 --
T type 변수 return_t 가 만들어졌으니 어디선가는 사라져야 하
T type 변수 return_t 가 만들어졌으니 어디선가는 사라져야 하지 않겠습니까?
함수에서 생성자/소멸자의 호출을 줄이기 위해서라면 return value optimization 기법(RVO)을 사용해보세요. 자세한 건 google에게 물어보세요.
그리고 몇 군데 지적.
1. 보통 xxx_t 는 관례적으로 typename을 위해 사용됩니다. (예: int16_t) 변수명으로 return_t 를 쓴다면 나중에 유지보수할 때에 혼란을 줄 가능성이 있습니다.
2. T 형에 NULL(정수 0이겠죠?)에 대한 생성자가 없다면 문제가 되겠죠? 최소한 return T(NULL); 이라고 casting해서 주는 게 안전하겠죠?
그리고 값없음을 돌려주고 싶다면 차라리 bool get(int num, T &return_val); 식으로 하는게 어떨까요? get이 실패하면 false를, 성공하면 true를 돌려주게 하고요.
함수의 목적이 뭔지 모르겠지만 코드 조각만 보면 템플릿에는 별로 적합하지
함수의 목적이 뭔지 모르겠지만 코드 조각만 보면 템플릿에는 별로 적합하지 않은
것 같습니다. 다형적인 클래스 계층의 개체를 만드는 함수라면 factory pattern을
적용하는 것이 좋겠습니다.
리스트를 만든건데..
표준 list를 쓰닌까 정상적으로 동작하는데
내가 만든 list를 쓰닌까..문제가 생기네요..
일단 표준 list로 돌려놨습니다.
아직 C++이 넘 부족한게 느껴지네요..
답변 달아주신 분들 감사합니다..
댓글 달기