auto_ptr предполагает владение указателем, с помощью которого вы его строите.
т.е.он будет автоматически уничтожать объект, на который указывает указанный объект, как только сам auto_ptr будет уничтожен.
auto_ptr<int> x(i)
сделает x владельцем i
auto_ptr<int> y
сделает вас не владеющим ничем
Ваша y=x
операция переведет владение i * из x в y
, так что теперь y владеет i, а x ничего не имеет, это означает, что когда x уничтожается, ничего не происходит, а когда y уничтожается, i удаляется