프로그램 시작시 클래스의 인스턴스를 자동으로 암시 적으로 생성하려면 어떻게해야합니까?

크레이그 호킨스

Winsock 래퍼 라이브러리를 작성 중이며 WSAStartup프로그램이 실행되고 WSACleanup프로그램이 종료 될 자동으로 호출하고 싶습니다 . 이 두 함수는 생성자와 소멸자가있는 클래스에서 래핑됩니다. 클래스는 여러 인스턴스 등을 처리합니다.

내가 생각한 첫 번째 것은 extern wrapper dummy라이브러리에서 사용 하기 때문에 어떤 일이 발생하기 전에 인스턴스가 생성되고 프로그램이 종료되면 소멸자가 호출되어야합니다 (제 생각에).

이것이 효과가 있습니까 아니면 더 나은 방법이 있습니까?

테드 링모

초기화 및 초기화 해제를 한 번만 수행하고 winsock 클래스의 해당 클래스에서 상속하는 클래스를 만들 수 있습니다.

이것은 지연 초기화를 수행 하고 정적 초기화 순서 Fiasco 의 위험을 방지합니다 .

예:

#include <stdexcept>

class WSA {
    struct Cleaner { // a class to just call WSACleanup()
        ~Cleaner() { ::WSACleanup(); }
    };

    static bool in;
    static Cleaner cln; // a static instance of the Cleaner class to cleanup only once

    static bool init() {
        DWORD wVersionRequired = MAKEWORD(2, 2);
        WSADATA WSAData;
        int rv =::WSAStartup(wVersionRequired , &WSAData);
        if(rv) throw std::runtime_error("WSAStartup failed");
        return true;
    }
};

bool WSA::in = WSA::init(); // init() will only be executed once
WSA::Cleaner WSA::cln;

사용 예 :

class Socket : WSA {
    //...
};

모든 인스턴스에 대해 총 하나 bool+ 하나의 Cleaner인스턴스를 저장 WSA하므로 많은 오버 헤드가 발생하지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

암호 프롬프트없이 완전히 암호화 된 Ubuntu 시스템에 자동으로 로그인하려면 어떻게해야합니까?

분류에서Dev

암호 프롬프트없이 완전히 암호화 된 Ubuntu 시스템에 자동으로 로그인하려면 어떻게해야합니까?

분류에서Dev

Unity 런처에서 프로그램의 두 번째 인스턴스를 시작하려면 어떻게해야합니까?

분류에서Dev

gradle의 응용 프로그램 플러그인으로 생성 된 시작 스크립트에서 프로그램 이름을 응용 프로그램에 전달하려면 어떻게해야합니까?

분류에서Dev

동일한 상태로 Virtualbox 인스턴스를 시작하려면 어떻게해야합니까?

분류에서Dev

한 번의 스크립트로 여러 인스턴스에 저장 프로 시저를 생성하려면 어떻게해야합니까?

분류에서Dev

인스턴스 생성시 설정된 인스턴스 변수를 기반으로하는 크기로 Matlab 인스턴스의 속성을 기본값으로 설정하려면 어떻게해야합니까?

분류에서Dev

Python으로 Unity 시스템 인디케이터를 작성하려면 어떻게해야합니까?

분류에서Dev

Python으로 Unity 시스템 인디케이터를 작성하려면 어떻게해야합니까?

분류에서Dev

javascript (Nashorn Engine)로 인스턴스화 된 클래스를 다시 인스턴스화하려면 어떻게해야합니까?

분류에서Dev

로그인 할 때마다 프로그램을 자동 시작하려면 어떻게해야합니까?

분류에서Dev

하나의 변수로 클래스를 디자인하고 동시에 다른 변수로 작업하려면 어떻게해야합니까?

분류에서Dev

그놈 계산기의 여러 인스턴스를 동시에 얻으려면 어떻게해야합니까?

분류에서Dev

이 창 및 응용 프로그램 시간 추적 스크립트가 정렬 된 출력을 생성하도록하려면 어떻게해야합니까?

분류에서Dev

프로그램을 레지스트리에 추가하여 시작시 프로그램을 실행하려면 어떻게해야합니까?

분류에서Dev

저는 xstate에서 제공하는 첫 번째 앱을 작성했으며 시각화 도구 도구를 좋아합니다. 프로그래밍 방식으로 다이어그램을 생성하려면 어떻게해야합니까?

분류에서Dev

Debian VPS를 다시 시작할 때 resilio 서비스를 자동으로 시작하려면 어떻게해야합니까?

분류에서Dev

Debian VPS를 다시 시작할 때 resilio 서비스를 자동으로 시작하려면 어떻게해야합니까?

분류에서Dev

채팅 창에 명시적인 메시지로 게시하지 않고 사용자 정보를 Bot Framework 대화 인스턴스에 자동으로 전달하려면 어떻게해야합니까?

분류에서Dev

생성시 자동으로 나타나는 키보드를 제거하려면 어떻게해야합니까?

분류에서Dev

Postgres 시퀀스를 자동으로 수정하려면 어떻게해야합니까?

분류에서Dev

내 사용자 지정 개체에 대해 LINQ 쿼리 결과를 암시 적으로 캐스팅하려면 어떻게해야합니까?

분류에서Dev

시스템을 업데이트하기 전에 Btrfs 스냅 샷을 자동으로 생성하려면 어떻게해야합니까?

분류에서Dev

UniformServer Zero를 서비스로 시작하려면 어떻게해야합니까?

분류에서Dev

프로그램을 실행하기 위해 자바의 새 인스턴스를 시작하는 이클립스

분류에서Dev

Rails가 기본적으로 시스템 시간을 사용하게하려면 어떻게해야합니까?

분류에서Dev

부스트 로그를 수동으로 플러시하려면 어떻게해야합니까?

분류에서Dev

스프레드 시트에서 텍스트 파일의 데이터를 자동으로 구성하려면 어떻게해야합니까?

분류에서Dev

새 워크 플로 인스턴스를 시작할 때 내 워크 플로 RunID를 얻으려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    암호 프롬프트없이 완전히 암호화 된 Ubuntu 시스템에 자동으로 로그인하려면 어떻게해야합니까?

  2. 2

    암호 프롬프트없이 완전히 암호화 된 Ubuntu 시스템에 자동으로 로그인하려면 어떻게해야합니까?

  3. 3

    Unity 런처에서 프로그램의 두 번째 인스턴스를 시작하려면 어떻게해야합니까?

  4. 4

    gradle의 응용 프로그램 플러그인으로 생성 된 시작 스크립트에서 프로그램 이름을 응용 프로그램에 전달하려면 어떻게해야합니까?

  5. 5

    동일한 상태로 Virtualbox 인스턴스를 시작하려면 어떻게해야합니까?

  6. 6

    한 번의 스크립트로 여러 인스턴스에 저장 프로 시저를 생성하려면 어떻게해야합니까?

  7. 7

    인스턴스 생성시 설정된 인스턴스 변수를 기반으로하는 크기로 Matlab 인스턴스의 속성을 기본값으로 설정하려면 어떻게해야합니까?

  8. 8

    Python으로 Unity 시스템 인디케이터를 작성하려면 어떻게해야합니까?

  9. 9

    Python으로 Unity 시스템 인디케이터를 작성하려면 어떻게해야합니까?

  10. 10

    javascript (Nashorn Engine)로 인스턴스화 된 클래스를 다시 인스턴스화하려면 어떻게해야합니까?

  11. 11

    로그인 할 때마다 프로그램을 자동 시작하려면 어떻게해야합니까?

  12. 12

    하나의 변수로 클래스를 디자인하고 동시에 다른 변수로 작업하려면 어떻게해야합니까?

  13. 13

    그놈 계산기의 여러 인스턴스를 동시에 얻으려면 어떻게해야합니까?

  14. 14

    이 창 및 응용 프로그램 시간 추적 스크립트가 정렬 된 출력을 생성하도록하려면 어떻게해야합니까?

  15. 15

    프로그램을 레지스트리에 추가하여 시작시 프로그램을 실행하려면 어떻게해야합니까?

  16. 16

    저는 xstate에서 제공하는 첫 번째 앱을 작성했으며 시각화 도구 도구를 좋아합니다. 프로그래밍 방식으로 다이어그램을 생성하려면 어떻게해야합니까?

  17. 17

    Debian VPS를 다시 시작할 때 resilio 서비스를 자동으로 시작하려면 어떻게해야합니까?

  18. 18

    Debian VPS를 다시 시작할 때 resilio 서비스를 자동으로 시작하려면 어떻게해야합니까?

  19. 19

    채팅 창에 명시적인 메시지로 게시하지 않고 사용자 정보를 Bot Framework 대화 인스턴스에 자동으로 전달하려면 어떻게해야합니까?

  20. 20

    생성시 자동으로 나타나는 키보드를 제거하려면 어떻게해야합니까?

  21. 21

    Postgres 시퀀스를 자동으로 수정하려면 어떻게해야합니까?

  22. 22

    내 사용자 지정 개체에 대해 LINQ 쿼리 결과를 암시 적으로 캐스팅하려면 어떻게해야합니까?

  23. 23

    시스템을 업데이트하기 전에 Btrfs 스냅 샷을 자동으로 생성하려면 어떻게해야합니까?

  24. 24

    UniformServer Zero를 서비스로 시작하려면 어떻게해야합니까?

  25. 25

    프로그램을 실행하기 위해 자바의 새 인스턴스를 시작하는 이클립스

  26. 26

    Rails가 기본적으로 시스템 시간을 사용하게하려면 어떻게해야합니까?

  27. 27

    부스트 로그를 수동으로 플러시하려면 어떻게해야합니까?

  28. 28

    스프레드 시트에서 텍스트 파일의 데이터를 자동으로 구성하려면 어떻게해야합니까?

  29. 29

    새 워크 플로 인스턴스를 시작할 때 내 워크 플로 RunID를 얻으려면 어떻게해야합니까?

뜨겁다태그

보관