Uso de observer_ptr
Qual é exatamente o objetivo da construçãostd::observer_ptr
na especificação técnica V2 dos fundamentos da biblioteca?
Parece-me que tudo o que faz é embrulharT*
, que parece uma etapa supérflua se não adicionar segurança à memória dinâmica.
Em todo o meu código eu usostd::unique_ptr
onde eu preciso tomar posse explícita de um objeto estd::shared_ptr
onde posso compartilhar a propriedade de um objeto.
Isso funciona muito bem e evita a desreferenciação acidental de um objeto já destruído.
std::observer_ptr
certamente não garante a vida útil do objeto observado.
Se fosse construído a partir de umstd::unique_ptr
oustd::shared_ptr
Eu veria um uso nessa estrutura, mas qualquer código que simplesmente esteja usandoT*
provavelmente continuará fazendo isso e se eles planejam mudar para qualquer coisa, seriastd::shared_ptr
e / oustd::unique_ptr
(dependendo do uso).
Dada uma função de exemplo simples:
template<typename T>
auto func(std::observer_ptr<T> ptr){}
Onde seria útil se ele impedisse que ponteiros inteligentes destruíssem seu objeto armazenado enquanto estavam sendo observados.
Mas se eu quero observar umastd::shared_ptr
oustd::unique_ptr
Eu tenho que escrever:
auto main() -> int{
auto uptr = std::make_unique<int>(5);
auto sptr = std::make_shared<int>(6);
func(uptr.get());
func(sptr.get());
}
O que o torna não mais seguro do que:
template<typename T>
auto func(T *ptr){}
Então, qual é o uso dessa nova estrutura?
É apenas para fonte de auto-documentação?