2011-02-13 5 views
3

두 개의 특정 함수가있을 때마다 함수를 호출 할 때 호출 할 함수와 함수에서 반환 할 때 호출 할 함수가있을 때마다 일반적으로 도우미 클래스를 사용하여 함수 생성자와 소멸자에서 호출되기를 원하는 경우 - 함수의 시작 부분에서 해당 클래스의 객체를 인스턴스화하면됩니다. 대부분 return 문 앞에 return에서 호출 할 함수를 배치하는 것을 피하는 방법을 모르기 때문에 대부분이 작업을 수행합니다.반환 할 때 함수를 호출하는 방법

이 문제를 해결하기위한 대안 또는 더 좋은 방법이 있는지 궁금합니다. 나는 경험이 없기 때문에 내 방법이 "끔찍한 프로그래밍"으로 간주되는지조차 모르겠다.

+0

여기에서 해결하려는 문제는 무엇입니까? 무엇이 처음부터 함수를 호출해야하고 이러한 모든 함수가 처음부터 반환되어야합니까? – Joe

+2

@ Joe : 하나의 시나리오는 로깅 일 수도 있습니다. 여기서 당신은 당신이 기능을 입력/종료 할 때마다 기록하기를 원하고 글쓰기를 자제하고 싶을 것입니다. 글쎄, 그게 적어도 내가 생각하는 것입니다 ... – Xeo

+0

나는이 경로를 로깅을 위해 정확히 수행한다.이 접근법에 아무런 문제가 없다. afaik – fusi

답변

6

이것은 매우 일반적인 기술입니다. 보다 구체적으로, 소멸자는 객체가 초기화 된 범위를 벗어날 때 호출되며, 함수가 반환되기 전에있을 수 있습니다. 이 중 하나는 잠금이있는 경우 사용되며, 여기서 도우미 객체는 파괴 될 때 잠금 해제를 수행하는 데 사용됩니다.

예외가 발생하는 경우를 포함하여 범위를 벗어날 때 함수가 호출되는 것을 보장하는 유일한 방법입니다.

하나의 다른 상황은 실제로 어떤 명시 적으로 호출하지 않고도 코드에 연결할 수있게 해주는 프로파일 러 (예 : 코드)를 구현하는 코드입니다. 그러나 나는 이것이 당신이 겪은 일이라고 생각하지 않습니다.

+0

감사합니다. 당신의 답을 옳은 것으로 표시했습니다. 그러나, 나는 당신이 내 클래스를 인스턴스화 한 함수에 대한 "return"호출이 소멸자가 호출되지 않도록하는 상황을 자세히 설명 할 수 있는지 궁금합니다. – MHZ

+0

@MHZ; 간단히 말해서 소멸자가 일찍 호출되었을 수도 있습니다. 즉, 인스턴스화 된 내부 범위를 벗어날 때입니다. 'void x() {{MyHelper x;} std :: cout << "Hello World"; }', 여기서'MyHelper' 소멸자는'cout <<'전에 호출됩니다. – falstro

+0

해명 해 주셔서 감사합니다. "MyHelper x;" "{MyHelper x;}"대신 void x()에서 반환 될 때 소멸자가 호출됩니까? – MHZ

1

이 작업을 수행하는 표준 C++ 방법입니다. Classes를 사용하는 초기 C에서는 다양한 함수의 진입 및 종료시 자동으로 호출되는 함수를 지정하는 특정 기능이 있었지만이 방법에 대해서는 객체를 사용하기 위해 제거되었습니다.

관련 문제