Неуместно напрямую вызывать деструктор объекта, который был выделен (без размещения) new
. Попробуйте изменить
m_object->~UnmanagedClass();
до
delete m_object;
m_object = 0;
(m_object = 0;
необходимо, потому что в отличие от деструктора нативного типа C ++, который может вызываться только один раз, реализация Dispose
управляемого типа может вызываться повторно, и это должно иметь определенное поведение.)
Или, что еще лучше, в дополнение к представлению функции GetInstance
, также представьте функцию DestroyInstance
и вызовите ее вместо использования delete
, так что использование кода не должно зависеть от деталей реализации GetInstance
(то есть, что он выделяет свой экземпляр, используя operator new
).