📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Sistemas com C++. Recomendado revisar antes de começar.
v1.0 — C++23 Moderno, Idioma RAII, Smart Pointers e Move Semantics
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Simulador de Física · C++23 · RAII ·
std::unique_ptr· Move Semantics- v2: Engine Multithreaded com
std::jthread& Lock-Free Queues- v3: Renderizador Gráfico 3D com Vulkan / OpenGL Moderno
- v4: SIMD Intrinsics (AVX-512) & Otimizações de Baixa Latência
🎓 Nível Profissional Simulado: Engenheiro de C++ Moderno / Game Engine Developer. O C++ moderno (C++20/C++23) abandonou os perigosos ponteiros crus e o
deletemanual. Hoje, a indústria de jogos AAA, finanças de alta frequência (HFT) e veículos autônomos exige RAII, Smart Pointers e Move Semantics para garantir velocidade máxima sem riscos de vazamento.
—`
Construir um Simulador de Corpos Rígidos e Gravidade em C++23 Moderno, aplicando o princípio fundamental do RAII (Resource Acquisition Is Initialization) com std::unique_ptr e std::vector, implementando cálculo vetorial em ponto flutuante e transferência de posse via Move Semantics (std::move).
—`
“Nossa engine de física não pode usar
newedeletesoltos no código porque exceções estavam causando vazamentos graves. Queremos um subsistema de partículas e corpos celestes em C++23 que gerencie os objetos através do idioma RAII e Smart Pointers (std::unique_ptr), calcule trajetórias e velocidades a cada frame (tick) e seja 100% à prova de vazamentos mesmo se ocorrer uma exceção.”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Criar classe CorpoFisico com massa, vetor posição $(x, y)$ e vetor velocidade $(vx, vy)$. |
“corpos celestes e partículas” |
| RF02 | Funcional | Gerenciar coleção de corpos utilizando std::vector<std::unique_ptr<CorpoFisico>>. |
“usar Smart Pointers” |
| RF03 | Funcional | Atualizar posições a cada tick de tempo ($\Delta t$) aplicando equações de aceleração gravitacional. | “calcule trajetórias e velocidades” |
| RNF01 | Não-Funcional | Idioma RAII estrito: zero chamadas a delete manual. |
Padrão C++ Moderno |
| RNF02 | Não-Funcional | Compilação em padrão C++20 / C++23 com Clang ou GCC. | Desempenho Moderno |
—`
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como desenvolvedor da engine, quero adicionar corpos dinâmicos sem me preocupar com desalocação manual. | Alta |
| US02 | Como usuário da simulação, quero avançar 100 frames e ver a órbita calculada. | Alta |
—`
# Branch da funcionalidade
git checkout -b feature/US01-cpp23-raii-physics
# Compilar com g++ moderno
g++ -std=c++23 -O3 -Wall -Wextra main.cpp -o physics_sim && ./physics_sim
—`
main.cpp)#include <iostream>
#include <memory>
#include <vector>
class CorpoFisico {
public:
double x, y, vx, vy;
CorpoFisico(double x, double y, double vx, double vy) : x(x), y(y), vx(vx), vy(vy) {}
~CorpoFisico() { std::cout << "Corpo destruido deterministicamente via RAII.
"; }
void atualizar(double dt) {
x += vx * dt;
y += vy * dt;
}
};
int main() {
std::vector<std::unique_ptr<CorpoFisico>> cena;
cena.push_back(std::make_unique<CorpoFisico>(0.0, 0.0, 10.0, 5.0));
for (int i = 0; i < 5; ++i) {
cena[0]->atualizar(0.1);
std::cout << "Frame " << i << ": Posicao = (" << cena[0]->x << ", " << cena[0]->y << ")
";
}
return 0; // Memoria liberada automaticamente ao destruir o vetor cena!
}
—`
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd sistemas_cpp_01_simulacao_raii
g++ -std=c++20 -O2 src/main.cpp -o app && ./app
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/sistemas_cpp_01_simulacao_raii`
std::unique_ptr e std::make_unique para segurança de exceção e eliminação de ponteiros crus.—`
assert(cena[0]->x > 0.0); // Validacao de integridade fisica
—`
- Aplicação compilada em C++23 com otimização
-O3.- Padrão RAII garantindo desalocação automática dos objetos.
| ⬅️ Ver Todos os Projetos no Super-Hub | 🏠 Página Inicial do Portal |