<p>Now that <code>shared_ptr</code> is in tr1, what do you think should happen to the use of <code>std::auto_ptr</code>? They both have different use cases, but all use cases of <code>auto_ptr</code> can be solved with <code>shared_ptr</code>, too. Will you abandon <code>auto_ptr</code> or continue to use it in cases where you want to express explicitly that only one class has ownership at any given point?</p>

<p>My take is that using <code>auto_ptr</code> can add clarity to code, precisely by adding nuance and an indication of the design of the code, but on the other hand, it add yet another subtle issue when training new programmers: they need to understand smart pointers and the fine details of how they work. When you use only one smart pointer everywhere, you can just lay down a rule 'wrap all pointers in <code>shared_ptr</code>' and be done with it.</p>

<p>What's your take on this?</p>

I believe that "wrap all pointers in
```
shared_ptr
```
" should indeed be the default mode, and is suitable advice to give to your junior coders. However, in the special ownership cases that you mentioned,
```
auto_ptr
```
is indeed more appropriate and its use should be encouraged under such circumstances.