Globale Zeigervariable?



  • in meinem Header:

    #ifndef APPLICATION_H
    #define APPLICATION_H
    
    #include <memory>
    
    class Application
    {
        public:
            Application();
            ~Application();
        private:
    };
    
    extern std::unique_ptr<Application> pApp;
    
    #endif // APPLICATION_H
    

    in der Main.cpp

    #include <windows.h>
    
    std::unique_ptr<Application> pApp(nullptr);
    
    int WINAPI WinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPSTR lpCmdLine,
                       int nCmdShow)
    {
        UNREFERENCED_PARAMETER(hInstance)
        UNREFERENCED_PARAMETER(hPrevInstance)
        UNREFERENCED_PARAMETER(lpCmdLine)
        UNREFERENCED_PARAMETER(nCmdShow)
    
        pApp.reset(new Application);
        ...
    
        ...
        pApp.reset(nullptr);
    
        return 0;
    }
    

    durch den unique_ptr kontrolliere ich die Lebenszeit meines Application-Objekts. Der Unique_ptr wird auf dem static memory erzeugt, noch vor der WinMain, aber in der WinMain erzeuge ich dann das Application-Objekt auf dem Heap. Ist das eine schlaue Möglichkeit ein globales Appliication-Objekt zu erzeugen für a)

    SingleThreaded -

    b)

    Multithreaded - Anwendung.

    Wirft der unique_ptr eine Ausnahme...reißts die Anwendungs weg? Ist ein globaler Rohzeiger besser?

    MFG


  • Mod

    Warum verwendest Du dann nicht gleich ein statisch deklariertes Objekt?
    Warum sollte der unique_ptr eine Exception werfen?
    Wo siehst Du ein Problem im multithreading. Sowohl unique pointer als auch roher pointer als auch statische Instanz wären da OK.


Log in to reply