Overloading destructor C++

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
difesaparcosempione
Rampante Reduce
Rampante Reduce
Messaggi: 6031
Iscrizione: giovedì 27 luglio 2006, 19:06
Località: Torino
Contatti:

Overloading destructor C++

Messaggio da difesaparcosempione »

Ha senso e sarebbe possibile in C++ eseguire l'overload del distruttore ?
Ciao
:D
cuccagna
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 423
Iscrizione: giovedì 26 marzo 2009, 15:50

Re: Overloading destructor C++

Messaggio da cuccagna »

No, in C++ non è possibile fare l'overloading del distruttore, che deve essere unico in una classe.
Se ha senso? Ma perchè avere due distruttori? Per rilasciare alcune risorse in un distruttore e delle altre diverse nell'altro? Puoi raggiungere tutto ciò con un flag booleano nel distruttore. Altre ragione per l'overloading non me ne vengono in mente
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Overloading destructor C++

Messaggio da SuperStep »

non è possibile passare parametri alla keyword delete dopo l'indirizzo

infatti è così

Codice: Seleziona tutto

delete somePointerAddress
e non così

Codice: Seleziona tutto

delete somePointerAddress()
quindi fare l'overloading non è possibile a prescindere
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
cuccagna
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 423
Iscrizione: giovedì 26 marzo 2009, 15:50

Re: Overloading destructor C++

Messaggio da cuccagna »

SuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4883291#p4883291][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:non è possibile passare parametri alla keyword delete dopo l'indirizzo

infatti è così

Codice: Seleziona tutto

delete somePointerAddress
e non così

Codice: Seleziona tutto

delete somePointerAddress()
quindi fare l'overloading non è possibile a prescindere
Francamente il tuo esempio non l'ho capito. Se stavi rispondendo a me io intendevo un'altra cosa:

Codice: Seleziona tutto

if(flag)
    delete risorsa1;
else
delete
risorsa2;
nello stesso distruttore anzichè chiamare un distruttore in cui eliminare risorsa1 ed un altro in cui eliminare risorsa2 (cercando una motivazione per avere due distruttori, cosa che ho già detto non è possibile)
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Overloading destructor C++

Messaggio da SuperStep »

non rispondevo a te ma a @difesaparcosempione.

overloading significa avere più funzioni con lo stesso nome ma signature diversa

esempio

Codice: Seleziona tutto

void funct();
void funct(int a);
void funct(boolean b, .... etc etc)
dal momento che il distrutture è anch'esso una funzione, ma viene invocata solamente con la chiamata delete, non vedo come si possa far corrispondere a diversi distruttori.

A differenza di new

Codice: Seleziona tutto

T t = new T(args...);
il delete di t si farà:

Codice: Seleziona tutto

delete t;
non viene passato alcun parametro, per cui, non ha senso proprio la domanda.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
cuccagna
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 423
Iscrizione: giovedì 26 marzo 2009, 15:50

Re: Overloading destructor C++

Messaggio da cuccagna »

SuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4883333#p4883333][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:non rispondevo a te ma a @difesaparcosempione.

overloading significa avere più funzioni con lo stesso nome ma signature diversa

esempio

Codice: Seleziona tutto

void funct();
void funct(int a);
void funct(boolean b, .... etc etc)
dal momento che il distrutture è anch'esso una funzione, ma viene invocata solamente con la chiamata delete, non vedo come si possa far corrispondere a diversi distruttori.

A differenza di new

Codice: Seleziona tutto

T t = new T(args...);
il delete di t si farà:

Codice: Seleziona tutto

delete t;
non viene passato alcun parametro, per cui, non ha senso proprio la domanda.
Ah ok giusto, pensavo rispondessi a me.
(Anche se il distruttore viene chiamato anche implicitamente e non solo quando si usa delete)
Avatar utente
difesaparcosempione
Rampante Reduce
Rampante Reduce
Messaggi: 6031
Iscrizione: giovedì 27 luglio 2006, 19:06
Località: Torino
Contatti:

Re: Overloading destructor C++

Messaggio da difesaparcosempione »

Quindi se ho capito bene, per ogni singola classe avrò un unico "distruttore", indicato da tildeNomeClasse ? Ok ?
Devo aver fatto un po di confusione con altri c ad oggetti? E' possibile ....
Ciao
cuccagna
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 423
Iscrizione: giovedì 26 marzo 2009, 15:50

Re: Overloading destructor C++

Messaggio da cuccagna »

difesaparcosempione [url=http://forum.ubuntu-it.org/viewtopic.php?p=4883343#p4883343][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Quindi se ho capito bene, per ogni singola classe avrò un unico "distruttore", indicato da tildeNomeClasse ? Ok ?
Devo aver fatto un po di confusione con altri c ad oggetti? E' possibile ....
Ciao
Si esatto.

Mi pare però devi usare nella definizione:

NomeClasse::tildeNomeClasse()
{
......
}


Nella dichiarazione devi mettere quello che dici te.
Ciao
Avatar utente
difesaparcosempione
Rampante Reduce
Rampante Reduce
Messaggi: 6031
Iscrizione: giovedì 27 luglio 2006, 19:06
Località: Torino
Contatti:

Re: Overloading destructor C++

Messaggio da difesaparcosempione »

Ok . si ti ricordi bene ...
Sapresti dirmi quale linguaggio C ha la possibilità di personalizzare i Distruttori ...
Dahman
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1013
Iscrizione: mercoledì 31 ottobre 2007, 8:29
Località: Torino

Re: Overloading destructor C++

Messaggio da Dahman »

Puoi spiegare cosa vuoi realizzare?
Magari una soluzione si trova.

ciao
dahman
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti