Это зависит от того, как была выделена эта память и используется ли механизм для ее выполнения («среда выполнения» или «диспетчер памяти») между конкретной DLL и другими частями приложения. Например. throw new my_exception( args );
также может быть в порядке в зависимости от деталей.
Вы могли бы подсчитать ссылку на ваше исключение, чтобы оно обладало внутренними знаниями о том, как уничтожить свой собственный экземпляр (и собственную память).
Использование IMalloc
(см. MSDN) для размещения и размещения экземпляров new
было бы другим способом (вызов OleInitialize
раньше) ...
Действительно, распределение памяти является проблемой в зависимости от того, что используется. Например, смешивание статически связанных CRT и динамически связанных CRT в разных частях приложения приведет к таким же проблемам, что и код отладки и выпуска микширования. Проблема здесь в том, что код, который должен освободить память, использует другой «менеджер памяти». Но если брошенный объект знает о своем собственном уничтожении, все должно быть в порядке, поскольку код dtor будет находиться в том же модуле компиляции, что и тот, который его выделяет.