Uso de observer_ptr

¿Cuál es exactamente el punto de la construcción?std::observer_ptr en la biblioteca fundamentos especificación técnica V2?

Me parece que todo lo que hace es envolverT*, lo que parece un paso superfluo si no agrega seguridad de memoria dinámica.

En todo mi código usostd::unique_ptr donde necesito tomar posesión explícita de un objeto ystd::shared_ptr donde puedo compartir la propiedad de un objeto.

Esto funciona muy bien y evita la desreferencia accidental de un objeto ya destruido.

std::observer_ptr no garantiza la vida útil del objeto observado, por supuesto.

Si fuera construido a partir de unstd::unique_ptr ostd::shared_ptr Vería un uso en dicha estructura, pero cualquier código que simplemente esté usandoT* probablemente seguirá haciéndolo y si planean mudarse a algo, seríastd::shared_ptr y / ostd::unique_ptr (dependiendo del uso).

Dado un ejemplo simple de función:

template<typename T>
auto func(std::observer_ptr<T> ptr){}

Donde sería útil si impidiera que los punteros inteligentes destruyeran su objeto almacenado mientras están siendo observados.

Pero si quiero observar unstd::shared_ptr ostd::unique_ptr Tengo que escribir:

auto main() -> int{
    auto uptr = std::make_unique<int>(5);
    auto sptr = std::make_shared<int>(6);
    func(uptr.get());
    func(sptr.get());
}

Lo que lo hace no más seguro que:

template<typename T>
auto func(T *ptr){}

Entonces, ¿de qué sirve esta nueva estructura?

¿Es solo para una fuente autodocumentada?

Respuestas a la pregunta(6)

Su respuesta a la pregunta