std :: shared_ptr: reset () vs. atribuição

Esta é uma pergunta básica, mas não encontrei um post anterior sobre isso. O título da pergunta a seguir parece ser a mesma pergunta que a minha, mas a pergunta em si não corresponde ao título:é melhor usar shared_ptr.reset ou operator =?

Estou confuso sobre o objetivo doreset() função membro destd::shared_ptr: o que isso contribui além do operador de atribuição?

Para ser concreto, dada a definição:

auto p = std::make_shared<int>(1);

As duas linhas a seguir são equivalentes:

p = std::make_shared<int>(5);
p.reset(new int(5));

E quanto a estes:

p = nullptr;
p.reset();

Se as duas linhas são equivalentes nos dois casos, então qual é o objetivo dereset()?

EDIT: Deixe-me refazer a pergunta para enfatizar melhor o seu ponto. A questão é: existe um caso em quereset() nos permite alcançar algo que não é tão facilmente possível sem ele?

questionAnswers(4)

yourAnswerToTheQuestion