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?