Howto: Looki Singletonholder im mixed code | atexit assert



  • Wenn man im Mixedcode den Singletonholder der Lookilib verwenden will, wird man beim Aufruf der std::atexit sein Programm mit einem Assert beenden.

    atexit wird z.B. bei der DefaultLifetime Policy verwendet:

    template <class T>
        struct DefaultLifetime
        {
            static void ScheduleDestruction(T*, atexit_pfn_t pFun)
            { 
                std::atexit(pFun); 
            }
    
            static void OnDeadReference()
            { throw std::logic_error("Dead Reference Detected"); }
        };
    

    Das einsetzen von _onexit_m hilft hier (aus Zeitdruck den bösen C Cast verwendet)

    template <class T>
        struct DefaultLifetime
        {
            static void ScheduleDestruction(T*, atexit_pfn_t pFun)
            { 
                _onexit_m((_onexit_m_t)pFun);
            }
    
            static void OnDeadReference()
            { throw std::logic_error("Dead Reference Detected"); }
        };
    

    Die Zerstörung des Singletonobjektes ist sichergestellt.


Anmelden zum Antworten