분석 함수와 구조 함수

34738 단어 c#
구조 함수와 분석 함수를 언제 호출합니까
구조 함수의 역할은 모든 대상의 데이터 구성원이 언제의 초기 값을 가지고 있는지 확보하는 것이다.
분석 함수의 역할은 메모리와 자원을 회수하는 것이다. 일반적으로 구조 함수나 대상의 생명기 내에 얻은 자원을 방출하는 데 쓰인다.
일반적으로 우리는 구조와 분석의 순서를 안다.
구조는 클래스 차원의 가장 뿌리에서부터 시작하여 각 층에서 먼저 기류의 구조 함수를 호출한 다음에 구성원 대상의 구조 함수를 호출한다.분석은 구조와 상반된 순서에 따라 엄격하게 집행되고 이 순서는 유일하며 그렇지 않으면 컴파일러가 자동으로 분석 과정을 집행할 수 없다.
구조 함수와 분석 함수는 모두 컴파일러가 은밀하게 호출한 것이다.이 함수들의 호출 순서는 프로그램의 실행이 실례화 대상에 들어갈 때와 떠날 때 있는 역할 영역의 순서에 달려 있다.일반적으로 분석 함수의 호출 순서는 구조 함수의 호출 순서와 상반되지만 대상의 저장 클래스는 분석 함수의 호출 순서를 바꿀 수 있다.
전역 역할 영역에서 정의된 대상에 대한 구조 함수는 파일의 모든 다른 함수 (main 포함) 가 실행되기 전에 호출됩니다. (그러나 서로 다른 파일의 전역 대상 구조 함수의 실행 순서를 보장할 수 없습니다.)대응하는 분석 함수는main을 종료한 후에 호출됩니다.
exit 함수는 프로그램을 즉시 종료시키고 자동 대상의 분석 함수를 실행하지 않습니다.이 함수는 입력 오류나 프로그램이 처리하는 파일을 열 수 없을 때 프로그램을 종료하는 데 자주 사용됩니다.
abort 함수는 exit 함수와 기능이 비슷하지만, 프로그램이 즉시 종료되고, 대상의 분석 함수를 호출할 수 없습니다.abort 함수는 일반적으로 프로그램의 비정상적인 종료를 나타내는 데 쓰인다.
자동 국부 변수의 구조 함수는 프로그램의 실행이 대상을 정의하는 위치에 도달했을 때 호출되고, 대응하는 분석 함수는 프로그램이 이 대상의 작용역을 떠날 때 호출된다. (즉 이 대상을 정의하는 코드가 실행을 완성했다.)자동 대상에 들어가고 떠나는 역할 영역을 실행할 때마다 그 구조 함수와 분석 함수를 호출합니다.프로그램이 exit나 abort 함수를 호출하여 종료하면 자동 대상의 분석 함수를 호출하지 않습니다.
정적 국부 대상의 분석 함수는 이 대상이 정의된 위치에 처음 도착했을 때만 한 번만 호출됩니다.대응하는 분석 함수는main이 종료되거나 프로그램이 exit 함수를 호출할 때 호출됩니다.
글로벌 객체 및 정적 객체는 작성 시 반대 순서로 제거됩니다.프로그램이 exit 함수를 호출해서 종료되면 정적 대상의 분석 함수를 호출하지 않습니다.
다음 데모는 몇 개의 작용 영역이 다른 메모리 클래스의CreateAndDestory 클래스의 대상, 그들의 구조 함수와 분석 함수의 호출 순서를 보여 준다.

     
     
     
     
  1. #include
  2. #include
  3. using namespace std;
  4. class Demo
  5. {
  6. public:
  7. Demo( int, string); //
  8. ~Demo(); //
  9. private:
  10. int objectID; //ID number for object
  11. string message; //message describing object
  12. };
  13. Demo::Demo( int ID, string messagestring)
  14. {
  15. objectID = ID; //set object’s ID number
  16. message = messagestring; //set object’s descriptive message
  17. cout<< “Object “<” constructor runs “<endl;
  18. }
  19. Demo::~Demo()
  20. {
  21. cout<1 || objectID== 6 ?
    : “”);
  22. cout<< “Object “<” destructor runs “<endl;
  23. }
  24. void create(void);
  25. Demo first(1,“(main )”); // first 。 main
  26. // ,
  27. int _tmain( int argc, _TCHAR* argv[])
  28. {
  29. cout<<
    main :”
    << endl;
  30. Demo second(2,“(main )”);
  31. static Demo third(3,“(main )”);
  32. create();
  33. cout<<
    main : ”
    << endl;
  34. Demo fourth(4,“(main )”);
  35. cout<<
    main : ”
    << endl;
  36. system( “pause”);
  37. return 0;
  38. }
  39. void create(void)
  40. {
  41. cout<<
    create : ”
    << endl;
  42. Demo fifth(5,“(cerate )”);
  43. static Demo sixth(6,“(cerate )”);
  44. Demo seventh(7,“(cerate )”);
  45. cout<<
    cerate : ”
    << endl;
  46. }


 

Object 6 destructor runs (cerate  )

Object 3 destructor runs (main )

Object 1 destructor runs (main )

    Main 3secondfourth , , third 。 , 。

mianfourthsecondthird , 。 thirdfirst , 。

    Create 3fifth seventhsixthcreateseventhfifthsixth , 。 sixththird first , 。

:《c++ 》       P259-262

            

좋은 웹페이지 즐겨찾기