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.