Довольно печально, что этот код компилируется, но это сделано специально.Оператор удаления, примененный к управляемому типу, фактически не освобождает память.Он вызывает метод IDisposable :: Dispose () для переданного объекта.Довольно печально, что это даже работает, IntPtr упаковывается, чтобы превратить его в объект, а затем проверяется, реализует ли он интерфейс IDisposable.Конечно, ничего не происходит.
Вы должны передать указатель, полученный вами от оператора new .Не забудьте сделать это в блоке finally, чтобы исключение не могло вызвать утечку.
Кстати, в коде, который вы прокомментировали, есть больше сложностей.Используемый вами конструктор Bitmap требует, чтобы IntPtr был действительным, вы не можете освободить память, пока Bitmap больше не используется.Поэтому использование delete на самом деле недопустимо.Попробуйте вместо этого использовать Bitmap.LockBits (), чтобы получить указатель на растровое изображение, которое управляет собственной памятью.И остерегайтесь шагов.