operator=
принимает еще один shared_ptr
в качестве параметра, создавая, таким образом, еще одну копию (и увеличивая счетчик ссылок), в то время как reset()
получает указатель и, возможно, средство удаления, таким образом, в действительности создавая новый shared_ptr поверх текущего..
сброс эквивалентен (и, вероятно, реализован как)
void reset(T p, D d)
{
shared_ptr shared(p,d);
swap( shared );
}
operator=
, вероятно, будет реализован как:
shared_ptr& operator=( shared_ptr const& other )
{
shared_ptr shared(other);
swap(other);
return *this;
}
Эти две функции похожитем, что они освобождают контроль над тем, что они уже содержат, если таковые имеются, и вместо этого управляют другим указателем.