Ponteiros

61 views
Skip to first unread message

uilson...@gmail.com

unread,
Apr 11, 2025, 7:10:10 PMApr 11
to ccppbrasil
Galera,

Tenho um problema sério com ponteiros, porque não sei quando usa los. 
Ainda nao consegui compreender, quando preciso apontar para um endereço de memoria.
Eu vim do C# e nao usava ponteiros, pois estavam encapsulados...
Se alguem conseguir me ajudar com essa questao eu agradeço.

Obrigado
Uilson

Roberto Spadim

unread,
Apr 11, 2025, 9:37:07 PMApr 11
to ccppb...@googlegroups.com
Aprende a usar & e const em c++ e ta de boas, pra maioria dos casos. As vezes uns move semantics

Vai usar quando quiser fazer algo dinamico, evitar copiar memoria e so apontar pra uma posicao

Na duvida coloca no gpt parte do codigo e pergunta se seria possivel fazer com ponteiro e quais as vantagens. Sem zueira

Roberto Spadim
SPAEmpresarial


--
http://ccppbrasil.github.io/
https://twitter.com/ccppbrasil
 
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para ccppbrasil+...@googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/177174b9-67bf-4e44-81e4-5a24de92605an%40googlegroups.com.

Bruno Sanches

unread,
Apr 11, 2025, 10:20:02 PMApr 11
to ccppb...@googlegroups.com
Você pensar em ponteiros como referências em C# para quando você faz new numa classe já é meio caminho andado e resolve boa parte dos problemas.

A diferença principal a aprender em C++ é:

void func()
{
           MinhaClass *p = new MinhaClasse();

           p->fazAlgo();

          delete p;
}

em 99% dos casos você deve fazer apenas:
void func()
{
           MinhaClass p;

           p.fazAlgo();
}

A diferença entre as duas funções é que na primeira você aloca a classe dinâmicamente e armazena na heap, tem que fazer o delete para desalocar a memória (e invocar o destrutor da classe), sendo que em C# o GC vai fazer o delete por você em algum momento.

Na segunda função você aloca na pilha que é o recomendado e geralmente muto mais rápido e menos suscetível a erro.

Entenda bem esse exemplo que já é o começo.

T+

Bruno Sanches
========================
https://github.com/bcsanches



Em sex., 11 de abr. de 2025 às 20:10, uilson...@gmail.com <uilson...@gmail.com> escreveu:
--

Bruno Sanches

unread,
Apr 11, 2025, 10:21:38 PMApr 11
to ccppb...@googlegroups.com
Um terceiro exemplo:

void func()
{
           unique_ptr<MinhaClass> p{new MinhaClasse()};

           p->fazAlgo();
}

Note nesse caso que não tem o delete explicitamente, o unique_ptr faz isso para você quando ele sai de escopo, semelhante ao "using" no C# para invocar os IDisposable.

Bruno Sanches
========================
https://github.com/bcsanches


Uilson Claudio

unread,
Apr 11, 2025, 10:28:08 PMApr 11
to ccppb...@googlegroups.com
Obrigado gente pela ajuda....
Abraço

Você recebeu essa mensagem porque está inscrito em um tema no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse tema, acesse https://groups.google.com/d/topic/ccppbrasil/sOHY0FwEDoA/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus temas, envie um e-mail para ccppbrasil+...@googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CAKG6imfgvREcM6geQ5VmuWnc10G78%2B9OL6Ep8mxUdqvF972jNw%40mail.gmail.com.

Julio Cezar Novais Raffaine

unread,
Apr 12, 2025, 8:58:50 PMApr 12
to ccppb...@googlegroups.com
Minha humilde contribuição:

Em grande parte dos casos, você não precisa mais usar ponteiros pois pode passar objetos para funções por referência, sejam elas mutáveis (como no caso de um parâmetro usado para retornar valor) ou não (para eficiência no uso de memória, evitando cópias).

Quando o assunto é alocação da memória, você invariavelmente vai acabar usando ponteiros pois diferentemente das referências, estes podem ser inicialmente vazios (nullptr) e dessa forma você pode adotar diferentes durações para as alocações de memória que não estão dependentes do escopo das funções (o que é o caso das variáveis locais que tem a duração atrelada à função em que estão).

A recomendação atual é não gerenciar manualmente a memória com ponteiros diretamente mas com objetos que melhor abstraem o propósito do ponteiro, no namespace std temos o unique_ptr para situações onde o ponteiro não pode ser copiado (a situação mais comum se não houver concorrência) e o par shared_ptr e weak_ptr para as situações onde múltiplas threads de execução podem ter cópias do ponteiro e a desalocação do mesmo deve levar isso em conta.

Quase todas as bibliotecas para desenvolvimento de aplicativos GUI, jogos e outras vão trabalhar com ponteiros, então não acho que é muito uma questão de saber quando usá-los, mas sim como usá-los visto que você vai acabar usando uma hora ou outra.



--
Julio Cezar Novais Raffaine

Fabio A Mazzarino

unread,
Apr 12, 2025, 10:06:57 PMApr 12
to ccppb...@googlegroups.com
Puxa vida:

Eu e essa minha preguiça de sentar e fazer essa porcaria de curso sobre ponteiros.

Eu tenho uma aula que dou presencialmente e consigo, em poucas horas, explicar como os ponteiros funcionam e como utilizá-los em C. Só que pra isso eu tenho que voltar às aulas de eletrônica digital e ensinar um pouquinho de assembly, por isso é um pouco complicado fazer uma aula online, eu preciso nivelar por baixo.

Daí pra C++ é apenas um passo. 

Todo mundo que teve essa aula comigo disse que passou a entender os ponteiros da forma apropriada, e nunca mais esqueceram.

Mas por enquanto eu tenho tudo aqui na minha cabeça, e só consegui dar essa aula pessoalmente.

Uma pena :(


--

Lab C++ - Código, Dicas e Snippets


Em sex., 11 de abr. de 2025 às 20:10, uilson...@gmail.com <uilson...@gmail.com> escreveu:
--

Uilson Claudio

unread,
Apr 12, 2025, 10:09:53 PMApr 12
to ccppb...@googlegroups.com
Fábio, 

Consegue me dar esse aula on-line via teams por exemplo? Quanto você cobraria ?

Abraço 
Uilson 

Você recebeu essa mensagem porque está inscrito em um tema no grupo "ccppbrasil" dos Grupos do Google.
Para cancelar inscrição nesse tema, acesse https://groups.google.com/d/topic/ccppbrasil/sOHY0FwEDoA/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus temas, envie um e-mail para ccppbrasil+...@googlegroups.com.
Para ver esta conversa, acesse https://groups.google.com/d/msgid/ccppbrasil/CALXhAFzesp5yu7UWGfC1L3PDcZNv3fUpyfvQk9-KB5P7Mbvt8Q%40mail.gmail.com.

Fabio A Mazzarino

unread,
Apr 12, 2025, 10:11:19 PMApr 12
to ccppb...@googlegroups.com
Qual seu nível de conhecimento em eletrônica digital?



Lab C++ - Código, Dicas e Snippets

Uilson Claudio

unread,
Apr 12, 2025, 10:13:22 PMApr 12
to ccppb...@googlegroups.com

Fabio A Mazzarino

unread,
Apr 12, 2025, 10:17:32 PMApr 12
to ccppb...@googlegroups.com
Me dá uma semana, depois do feriado eu vejo o qto de material eu consigo preparar.


Lab C++ - Código, Dicas e Snippets

Uilson Claudio

unread,
Apr 12, 2025, 10:33:15 PMApr 12
to ccppb...@googlegroups.com

Euripedes Rocha Filho

unread,
Apr 14, 2025, 3:45:32 AMApr 14
to ccppb...@googlegroups.com
Acrescentando 2c e voltando a pergunta original.
Assumindo que você tenha a ideia básica que um ponteiro aponta a um endereço de memória onde se construiu algo.
A resposta sobre quando usar depende de entender o ciclo de vida daquela coisa e como ela usa a memória.
Você precisa de utilizar somente no escopo local? Usar um ponteiro não é necessário.
Você desconhece o tamanho a ser usar ou os limites de uso de memória(tamanho de buffer, número de elementos em um array) ? Aqui um ponteiro pode ser necessário.
Você vai precisar mover entre threads?  Aqui um ponteiro é necessário.

Agora, não necessariamente esse ponteiro será explícito. Um exemplo é o uso de um std::vector. O ponteiro existe, mas está "escondido" na abstração.

No geral, na maior parte das vezes você lidará com referências e movendo instâncias e não deveria usar new e delete explícitos no seu código. 
Sempre que houver um ponteiro, na maior parte dos casos ele será um std::unique_ptr, ou deveria ser.

Reply all
Reply to author
Forward
0 new messages