C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[22138] [참고]함수 포인터는 가능한 한 안 쓰는 것이 좋습니다.
김백일 [cedar] 1369 읽음    2002-10-21 17:00
(이 글은 아리랑님의 리플에 대한 답글입니다.)

함수 포인터의 단점은 다음과 같습니다.

1) 디버깅이 어렵다.
(콜백함수나 이벤트 핸들링의 경우가 아니고) 함수 포인터를 사용하여
수동으로 호출하는 함수가 몇십개나 된다고 가정해 봅시다.
분기하기전에 브레이크 포인트를 걸고 어떤 함수로 분기하고자하는지
알고자 할때는 너무 어렵죠. 예를 들어 변수 a라면 값을 바로 알아 낼
수 있지만, 함수 포인터 p라면 그 값이 어떤 함수를 가리키는지 알 수가
없죠. 이럴때는 분기 가능한 모든 함수에 브레이크 포인터를 거는 수밖에
없습니다.

2) 속도가 느리다.
ANSI C 라이브러리에서 함수 포인터를 사용하는 대표적인 함수인
qsort의 경우를 생각해 봅시다. 대소 비교를 위해서 fcmp라는 함수 포인터를
사용하는 데, 이건 qsort 내부에서 대소 비교가 필요할 때마다 매번 호출됩니다.
실제 정렬하는 시간보다 함수 호출을 위한 비용이 훨씬 크게 되어버립니다.

그래서 ANSI C++ STL에서 이런 문제점을 해결하기 위해 만든 것이
함수 포인터를 대신하는 함수 객체(function object)입니다.
함수 객체란 멤버 함수로 함수 하나만 들어 있는 매우 간단한 클래스입니다.
클래스이기 때문에 당연히 인라이닝할 수 있지요.
그래서, STL의 sort가 C의 qsort보다 무려 67000배나 빠릅니다!

콜백함수나 이벤트 핸들링과 같이 반드시 필요한 경우나,
함수 포인터를 써야만 코드가 매우 간결해지는 경우외에는 가능한 한 사용하지 않는 것이 좋습니다.


+ -

관련 글 리스트
22128 함수포인터는 실무에서 얼마나 많이 쓰이나요? inetinfos 967 2002/10/21
30958     Re:함수포인터는 실무에서 얼마나 많이 쓰이나요? 아리랑 961 2002/10/21
22138     [참고]함수 포인터는 가능한 한 안 쓰는 것이 좋습니다. 김백일 1369 2002/10/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.