Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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: 2763
Iscritto: 21/09/2007

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

delete elemento;

ma è meglio se posti il codice


Ingegnere Informatico
https://ldlagency.it
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


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
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++.


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
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