📊 Capítulo 05: Ownership & Move Semantics
Especialização em Sistemas com Rust
🗺️ As Três Leis Sagradas do Ownership no Rust
flowchart TD
LEI1["1. Cada valor no Rust possui um único Dono (Owner) por vez"]
--> LEI2["2. Pode haver apenas UM Dono em determinado momento"]
--> LEI3["3. Quando o Dono sai de escopo, o valor é desalocado automaticamente (drop)"]
style LEI1 fill:#ede7f6,stroke:#512da8,stroke-width:2px
style LEI2 fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style LEI3 fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: Move Semantics vs Deep Copy
let s1 = String::from("Olá");
let s2 = s1; // MOVE! O ponteiro, length e capacity são copiados para s2. s1 fica INVÁLIDO!
// println!("{}", s1); // ERRO DE COMPILAÇÃO: borrow of moved value `s1`
- O Rust invalida a variável de origem para impedir Double-Free (desalocação duplicada de memória Heap).
🎯 Slide 2: A Trait Copy para Tipos da Stack
-
Tipos com
Copy: Tipos primitivos com tamanho fixo conhecido em tempo de compilação (i32,bool,f64,char, tuplas de tiposCopy). - Comportamento: Sofrem cópia bit a bit na Stack sem invalidar a variável original (
let y = x;mantémxeyválidos).
🎯 Slide 3: Passagem por Valor para Funções
-
Passar uma
StringouVeccomo argumento de função move a posse do dado para dentro da função. - A menos que a função retorne o valor de volta, o recurso será destruído ao final do corpo da função!
🔗 Navegação do Capítulo 05
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim