Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - puntatore void * e delete
Forum - C/C++ - puntatore void * e delete

Avatar
esteban (Normal User)
Newbie


Messaggi: 6
Iscritto: 21/11/2010

Segnala al moderatore
Postato alle 23:24
Lunedì, 29/11/2010
Ho semplicemente una variabile del tipo void * elemento. Come si fa il delete ad un puntatore void * ?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 12:04
Martedì, 30/11/2010

delete elemento;

ma è meglio se posti il codice

PM Quote
Avatar
esteban (Normal User)
Newbie


Messaggi: 6
Iscritto: 21/11/2010

Segnala al moderatore
Postato alle 16:31
Martedì, 30/11/2010
Codice sorgente - presumibilmente C++

  1. class Classe {
  2.  
  3. private:
  4.    void * elemento; // puntatore void
  5.  
  6. }
  7.  
  8. Classe::~Classe() {
  9.  
  10.    delete elemento; // che è un puntatore void
  11.  
  12. }



Mi da il warning quando faccio delete elemento, dicendomi questo:
deleting ‘void*’ is undefined

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:02
Martedì, 30/11/2010
mmm...se hai creato un puntatore void, evidentemente vuoi assegnargli qualche altro tipo di altro dato, come una classe che hai definito tu, tramite conversione.

Se fai :
Codice sorgente - presumibilmente C/C++

  1. void* puntatore = new void;



allora puoi usare delete, però non mi sembra molto sensato visto che void è un genere di dato non definito.

Se invece fai cosi :
Codice sorgente - presumibilmente C/C++

  1. void *puntatore = (void*)istanza_della_tua_classe;



allora il delete lo devi richiamare sull'istanza della tua classe.

Ultima modifica effettuata da il 30/11/2010 alle 18:03
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 21:35
Martedì, 30/11/2010
semplicemente in C++ non ha senso usare il tipo void * quando ci sono le classi template.

Codice sorgente - presumibilmente C/C++

  1. template <typename T>
  2. class Classe
  3. {
  4. private:
  5.        T *elemento;
  6. };//IL PUNTO E VIRGOLA ALLA FINE!
  7.  
  8.  
  9. template <typename T>
  10. Classe<T>::~Classe<T>()
  11. {
  12.  
  13.    delete elemento;
  14.  
  15. }


Ultima modifica effettuata da lorenzo il 30/11/2010 alle 21:36
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 13:34
Mercoledì, 01/12/2010
Testo quotato

Postato originariamente da lorenzo:

semplicemente in C++ non ha senso usare il tipo void * quando ci sono le classi template.

Codice sorgente - presumibilmente C/C++

  1. template <typename T>
  2. class Classe
  3. {
  4. private:
  5.        T *elemento;
  6. };//IL PUNTO E VIRGOLA ALLA FINE!
  7.  
  8.  
  9. template <typename T>
  10. Classe<T>::~Classe<T>()
  11. {
  12.  
  13.    delete elemento;
  14.  
  15. }




beh..magari non gli servono le funzionalità del template

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 20:07
Mercoledì, 01/12/2010
non si tratta di funzionalità, se esiste uno strumento adatto per fare una cosa perché non usarlo?
In C gli oggetti generici venivano gestiti tramite puntatore a valori void, in C++ si usano i template.

Non dirmi che non usi la STL solo perché non ne hai bisogno al 100%, la usi perché è comoda e perché è il core del C++.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:05
Mercoledì, 01/12/2010
nono, non sto dicendo questo.
mmmm..ti faccio un esempio pratico.

magari lui ha un membro static, e vuole che sia comune a tutte le istanze, non solo a quelle dello stesso tipo del template.

Oppure sta solo studiando le conversioni con void xD :rotfl::rotfl:

comunque direi che si puo chiudere qui, stiamo andando :ot:

Ultima modifica effettuata da il 01/12/2010 alle 21:07
PM Quote
Avatar
esteban (Normal User)
Newbie


Messaggi: 6
Iscritto: 21/11/2010

Segnala al moderatore
Postato alle 17:11
Giovedì, 02/12/2010
Scusatemi per la risposta tardiva, ma avevo dimenticato di impostare la notifica via email. I template li conosco bene, ma mi serve sapere esattamente e meglio i puntatori a void *, un pò come simiulare la classe base object di java. I motivi non sto a spiegarli perchè mi dilungherei troppo.

PM Quote