Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352

    [C++]Assegnare un campo di una classe con "una_stringa"

    Ho un dubbio sull'assegnazione di un campo di una classe con un oggetto di tipo char * non allocato con malloc ma come un letterale "xxxxxx", ad esempio:

    codice:
    class A{
           const char * value;
    
           A(const char * v){
               value = v;
           }
    }
    
    
    Quindi in una funzione posso fare:
    
    A * create(){
            a = new A("ciao");
            return a;
    }
    Nel costruttore di A inizializzo il campo value con un puntatore a char che è stato inizializzato direttamente nella chiamata del costruttore con la 'stringa' "ciao". Quello che mi chiedo è quale sia il tempo di vita della zona di memoria allocata per "ciao", se cioè "ciao" viene trattato come un array di caratteri allocato staticamente che quindi, essendo una variabile locale viene deallocato all'uscita della funzione create(), oppure continua ad esistere dopo la funzione. Nel primo caso si assegna al campo value l'indirizzo di una zona di memoria non piu valida; ad ogni modo il compilatore non mi segnala problemi, quindi dovrebbe essere giusto, ma voglio essere sicuro.

    Ciao e grazie.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    74
    Continua ad esistere ma ci sono dei problemi.
    All'interno della funzione create() , e' stato creato un oggetto referenziato dalla variabile "a".
    Quando esegui il "return a;" ,viene semplicemente passato l'indirizzo dell'oggetto , la funzione viene terminata ma l'oggetto persiste ancora in memoria perche' e' stato creato nell'heap con "new".
    Quindi :

    A* create(){
    A a = new A("ciao");
    return a;
    }
    l'oggetto non viene distrutto alla terminazione della funzione , ma chi chiama la funzione create() deve sapere e ricordarsi di distruggere l'oggetto referenziato.
    Se non si ricorda si crea un memory-leak.

    A create(){
    A a("ciao");
    return a;
    }
    Invece in questo caso quando la funzione termina , l'oggetto instanziato "a" , viene distrutto , ma prima viene chiamato il costruttore di copia che crea una copia per il return.

  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Si questo lo so, la funzione create era solo per esempio, non era questo il problema, quanto sapere se il tempo di vita della variabile "ciao" andava oltre la funzione,


    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    74
    La variabile termina di esistere quando esce dallo scope dove e' stata creata.
    Ma quello che rappresenta non viene distrutto.

    Spero di averti dato una mano...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.