ここで std::auto_ptr<>::operator= について読みました
ただし、左側のオブジェクトが既に何らかのオブジェクトを指している場合、そのオブジェクトの割り当ては自動的に解除されないことに注意してください。これを明示的に行うには、新しい値を割り当てる前にメンバー関数 reset を呼び出します。
しかし、ヘッダーファイルのソースコードを読むとC:\Program Files\Microsoft Visual Studio 8\VC\ce\include\memory
template<class _Other>
auto_ptr<_Ty>& operator=(auto_ptr<_Other>& _Right) _THROW0()
{ // assign compatible _Right (assume pointer)
reset(_Right.release());
return (*this);
}
auto_ptr<_Ty>& operator=(auto_ptr<_Ty>& _Right) _THROW0()
{ // assign compatible _Right (assume pointer)
reset(_Right.release());
return (*this);
}
auto_ptr<_Ty>& operator=(auto_ptr_ref<_Ty> _Right) _THROW0()
{ // assign compatible _Right._Ref (assume pointer)
_Ty **_Pptr = (_Ty **)_Right._Ref;
_Ty *_Ptr = *_Pptr;
*_Pptr = 0; // release old
reset(_Ptr); // set new
return (*this);
}
正しい/標準的な動作は何ですか? 他の STL 実装はどのように動作しますか? 上記の Web サイトに間違った情報や古い情報が含まれている場合、参考としてどの Web サイトをお勧めしますか?