이글루스 로그인


한가지 실수, 한가지 고민

 

<실수 이야기>
멀쩡하게 만들어놓은 기능이 어느날 동작하지 않기 시작했습니다.
로직 상 바꾼 것도 없고, 아주아주 사소한 리팩토링이 있었는데 그걸 원인삼기는 무리였습니다.

그 사소한 리팩토링이란:

 std::map으로 A컨테이너를 하나 쓰는데,
A [GetValue()] = ptr; 을 괜히 복사 하나 줄여보겠다고
A.insert(make_pair(GetValue(), ptr)); 로 바꾼 것이었습니다..

그런데 GetValue() 부분은 템플릿으로 감싸져 있어서 템플릿이 풀리다가 무언가 오동작할 수도 있지 않을까?란 근거없는 심증이 들어, 이렇게 바꿉니다
uint k = GetValue();
A.insert(make_pair(k, ptr));

앗 갑자기 기능이 동작합니다(?)

GetValue()는 side effect가 없는 const함수고, 전혀 저렇게 바꾼다고 의미도 바뀔 이유가 없는데 말이죠.

괜히 컴파일러 탓을 해보고, 템플릿이 이상하다는 둥 별 난리를 다 떱니다.

std::map의 insert는 같은 key값이 있으면 value를 갱신하지 않는다는, 이미 예전에 알고 있던 사실을 잊어버린 채..
이미 GetValue()에 해당하는 key값에 NULL pointer가 value로 박혀있던 것이죠. 그래서 ptr 설정이 안되었던 것입니다.

참고로, k = GetValue()를 밖으로 빼서 동작한 건 데이터가 초기화되어서 insert 실패가 안 났던 것이었습니다-_-

간만에 자괴감드는 코딩 실수를 하니 기분이 상큼하군요(?)

--

<고민 이야기>

포커 영화 라운더스에, "니가 앉은 포커 테이블에서, 30분이 지나도 호구가 안 보이면 바로 니가 호구다" 라는 대사가 나옵니다.

입사 후 30일이 지났는데 우리 팀 개발자 중에 호구가 보이지 않습니다...

by lazyboy | 2009/04/04 01:55 | Programming | 트랙백 | 덧글(7)

트랙백 주소 : http://lazyboy.egloos.com/tb/4857184
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by JM at 2009/04/04 04:09
괜찮아 깨달았으니 괜찮아
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
Commented by lazyboy at 2009/04/05 14:18
실수 얘긴가 고민 얘긴가.. ㅡㅡ+
Commented by rein at 2009/04/04 19:51
첫번째껀 반환값(의 second)를 보셨어야(...). 전 저게 전부 VERIFY안에 있어효 ㅋ(...)

고민이야기는 좀 무섭군요. 저도(이하생략)
Commented by lazyboy at 2009/04/05 14:20
사실 몰랐으면 STL 레퍼런스를 보고 쓰는 건데.. 옛날에 봐뒀길래 안다고 생각하고 그냥 써서요 흑흑
GPG스터디에서 'insert가 불필요한 복사가 적다'라는 내용을 보고 무작정 한 게 패인..
Commented by 飛烏 at 2009/04/04 22:54
일단 STL을 쓸 수 있다는 게 부럽군요 ㅜㅜ
Commented by lazyboy at 2009/04/05 14:21
부러우면 지는 거임(?)
Commented by 코난도일 at 2009/04/11 19:27
1. STL을 쓸 수 있다는 게 부러운 2人.

2. 토닥토닥...

:         :

:

비공개 덧글


◀ 이전 페이지          다음 페이지 ▶