Considere alguns ponteiros inteligentes que já vimos como Vec<T>
e String
.
O Vec<T>
é um ponteiro inteligente que simplesmente possui uma região da memória em bytes. O compilador Rust não tem ideia do que existe nesses bytes. O ponteiro inteligente interpreta o que significa pegar os itens da região da memória que ele gerencia, mantém o controle de onde os bytes das estruturas de dados começam e terminam e, finalmente, desreferencia um ponteiro bruto para uma estrutura de dados com uma interface ergonômica, limpa e fácil para nós usarmos (por exemplo, my_vec[3]
).
Da mesma forma, String
mantém o controle de uma região de memória em bytes, restringe programaticamente o conteúdo escrito nele para ser sempre utf-8
válido, e ajuda a desreferenciar essa região de memória em um tipo &str
.
Ambas as estruturas de dados usam desreferenciamento inseguro de ponteiros brutos para fazer seu trabalho.
Detalhes da memória: