Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida com perda de ponteiros em C++


Alex Hippler

Pergunta

Olá

Estou fazendo um sistema em C++ para um projeto e estou tendo um problema que acho que sei qual é a causa, mas não tenho certeza e não sei verificar isso.

A dúvida é a seguinte: supondo que temos a ClasseA, com seus atributos e etc.

Também temos a ClasseB, que possui uma lista de ponteiros da ClasseA.

Essa lista serve para que instâncias diferentes de uma ClasseC possam apontar para uma mesma instância da ClasseA.

O problema é que quando crio uma nova referência de uma ClasseA (ClasseA* c = new(ClasseA); ) e adiciono isso à lista na ClasseB, o compilador da um warning dizendo que a referência ao objeto c é temporário, acho que porque quando acabar o escopo do método em que ele é instanciado deixará de existir.

E é aí que entra o ponto principal do problema: por estar sendo referenciado na lista na ClasseB, o compilador entende que aquele pedaço de memória ainda precisa estar reservado ou depois de um tempo aquela referência criada na ClasseB vai apontar para lixo?

Obrigado!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Olá

Estou fazendo um sistema em C++ para um projeto e estou tendo um problema que acho que sei qual é a causa, mas não tenho certeza e não sei verificar isso.

A dúvida é a seguinte: supondo que temos a ClasseA, com seus atributos e etc.

Também temos a ClasseB, que possui uma lista de ponteiros da ClasseA.

Essa lista serve para que instâncias diferentes de uma ClasseC possam apontar para uma mesma instância da ClasseA.

O problema é que quando crio uma nova referência de uma ClasseA (ClasseA* c = new(ClasseA); ) e adiciono isso à lista na ClasseB, o compilador da um warning dizendo que a referência ao objeto c é temporário, acho que porque quando acabar o escopo do método em que ele é instanciado deixará de existir.

E é aí que entra o ponto principal do problema: por estar sendo referenciado na lista na ClasseB, o compilador entende que aquele pedaço de memória ainda precisa estar reservado ou depois de um tempo aquela referência criada na ClasseB vai apontar para lixo?

Obrigado!

Se você esta usando o operador new sem ele estar sobrecarregado, o ponteiro retornado é apenas um endereço de memoria, e ele vai ser válido ate você libera-lo diretamente chamando delete ou se a classe tiver um destrutor e ela sair do escopo.Parece que não é o caso.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...