std :: shared_ptr: reset () vs. asignación

Esta es una pregunta básica, pero no encontré una publicación anterior al respecto. El título de la siguiente pregunta parece que podría ser la misma pregunta que la mía, pero la pregunta en sí no coincide con el título:¿Es mejor usar shared_ptr.reset u operator =?

Estoy confundido sobre el propósito de lareset() función miembro destd::shared_ptr: ¿qué aporta además del operador de asignación?

Para ser concreto, dada la definición:

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

Son las siguientes dos líneas equivalentes:

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

Qué tal estos:

p = nullptr;
p.reset();

Si las dos líneas son equivalentes en ambos casos, entonces cuál es el propósito dereset()?

EDITAR: Permítanme reformular la pregunta para enfatizar mejor su punto. La pregunta es: ¿hay un caso dondereset() ¿nos permite lograr algo que no es tan fácil de lograr sin él?

Respuestas a la pregunta(4)

Su respuesta a la pregunta