int priority() { ... }; void processWidget(std::tr1::shared_ptr<Widget> pw, int priority) { ... }; processWidget(std::tr1::shared_ptr<Widget>(new Widget()), priority());
위의 Code를 봤을 때 processWidget의 인자에는 3가지 함수 호출이 일어난다.
- priority() 실행
- Widget 생성자 실행
- tr1::shared_ptr의 생성자 실행
C#이나 Java의 경우 인자의 실행 순서가 정해져 있지만, C++의 경우 Compiler 제작사마다 다를 수 있다.
아래의 경우를 생각해보자.
1. Widget 생성자 실행
2. priority() 를 실행하다가 예외발생
위의 경우에는 Widget 생성자로 만들었던 포인터가 유실될 수 있다.
댓글 없음:
댓글 쓰기