Both std::auto_ptr and std::tr1::shared_ptr use delete in their destructors, not delete[ ]. That means that using them with dynamically allocated arrays is a bad idea, though, regrettably, one that will compile.