
		paulo1205
		
		(usa Ubuntu)
		
		Enviado em 28/04/2015 - 21:34h 
		Thihup escreveu:
Então, eu consegui resolver esse problema, mas estou com outro :
Aparentemente está chamando o Destrutor da função já no inicio, sendo que em nenhum "momento" uso por exemplo, um delete. 
Cuidado com a terminologia.  “Destrutor da função” não faz muito sentido (a não ser que você esteja falando de um objeto-função, também chamado “
functor”, que é um objeto de uma classe com sobrecarga do operador 
(), de invocação de função).  Você se refere ao destrutor de algum objeto declarado dentro da função, certo?  Sendo esse o caso, seria interessante você mostrar a nova forma que a função assumiu, depois das modificações que você provavelmente fez depois da primeira mensagem (uma vez que disse que conseguiu resolver o problema inicial).
Na sua primeira postagem, você declarou diretamente um objeto 
teste dentro da função.  Esse objeto é alocado na pilha, e construído nesse espaço.  Quando ele sai do escopo, ele é automaticamente destruído e o espaço da pilha é liberado.  O compilador se encarrega disso para você, a fim de que, na medida do possível, o tipo desse objeto (sua classe) se comporte do modo mais parecido possível com tipos nativos (e.g. quando você declara uma variável local do tipo 
int ou 
double, a declaração já é uma instrução de reserva de espaço, e você também não se preocupa em liberar explicitamente o espaço dessa variável, pois sabe que ele será liberado quando a variável sair de escopo).
Você só teria de chamar explicitamente 
delete sobre um ponteiro que tivesse sido alocado por meio de 
new, e essa alocação teria provavelmente sido feita não na pilha, mas sim na memória livre (
free store, muitas vezes chamada também de 
heap), que não tem nenhuma relação com limites de blocos ou funções.
(Não tenho certeza, mas pelos meus testes não é chamada o construtor). 
De qual objeto?  De que tipo?  
std::string?  Se for 
std::string, sempre existe um construtor sendo chamado, pois a implementação garante isso (a não ser que você faça algum truque de baixo nível, que eu creio que não é o caso).
De todo modo, não existe relação necessária entre a invocação do destrutor com um dos construtores.  Uma classe pode ter vários tipos de construtores, e qual deles será chamado -- se é que algum o será -- depende de como você pedir para criar um objeto dessa classe.  Já destrutor, pode haver no máximo um; se ele existir, ele sempre será chamado no momento em que o objeto for destruído.