<p>If I declare a temporary auto deleted character buffer using</p>

<pre><code>std::auto_ptr&lt;char&gt; buffer(new char[n]);
</code></pre>

<p>then the buffer is automatically deleted when the buffer goes out of scope. I would assume that the buffer is deleted using delete.</p>

<p>However the buffer was created using new[], and so strictly speaking the buffer should be deleted using delete[].</p>

<p>What possibility is there that this mismatch might cause a memory leak?</p>

The behaviour of calling delete on a pointer allocated with new[] is
undefined
. As you assumed, auto_ptr
does call delete
when the smart pointer goes out of scope. It's not just memory leaks you have to worry about -- crashes and other odd behaviours are possible.
If you don't need to transfer the ownership of the pointer, Boost's
scoped_array
class might be what you're looking for.