|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 298
|
[C++] Help Distruttori
Ho un problema in C++ con il seguente codice:
Codice:
#include <iostream>
using namespace std;
const unsigned int num_int = 30;
class Calcolus {
float* int_tab;
public:
Calcolus();
~Calcolus();
void set_int(unsigned int,float);
float get_int (unsigned int);
};
Calcolus::Calcolus(){
if(int_tab==NULL){
int_tab=(float*)malloc(sizeof(float)*num_int);
}
}
Calcolus::~Calcolus(){
}
void Calcolus::set_int (unsigned int ind, float val){
if (ind<num_int){
if (int_tab==NULL)
int_tab=(float*)malloc(sizeof(float)*num_int);
int_tab[ind]=val;
}
}
float Calcolus::get_int (unsigned int ind){
float result;
if (ind>=num_int)
return 0;
if (int_tab==NULL)
return 0;
result=int_tab[ind];
return result;
}
int main()
{
Calcolus Prova;
Prova.set_int(1, 0.05);
Prova.set_int(2, 0.07);
cout << Prova.get_int(0) <<endl;
cout << Prova.get_int(1) <<endl;
cout << Prova.get_int(2) <<endl;
return 0;
}
Nella versione finale il distruttore dovrà eliminare int_tab con free, e in aggiunta tutti gli altri pointer che devo andare ad aggiungere. Altri esempi presi da Internet, ma analoghi funzionano. |
|
|
|
|
|
#2 | |
|
Bannato
Iscritto dal: Dec 2006
Messaggi: 212
|
Quote:
quando ho seguito programmazione c++, mi pare che il prof ci abbia detto che il distruttore, se dichiarato, va sempre definito comunque sia la cosa importante è una: è inutile dichiarare un distruttore se poi non viene specificata alcuna operazione associata ad esso, in tal caso basta il distruttore default del compilatore |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 298
|
Grazie della risposta.
Il distruttore implicito infatti funziona. Se lo esplicito, sia che gli definisca dentro qualcosa, sia che gli inserisca free(int_tab) mi da errore e il programma crasha all'avvio. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2008
Messaggi: 1242
|
Credo che l'errore sia nel check
if(int_tab==NULL) infatti per i campi non statici non avviene l'inizializzazione a NULL. Occore inizializzare l'attributo esplicitamente. Che io sappia il distruttore non crea alcun problema per il fatto di essere definito "vuoto". Inoltre comunque direi che non è tanto carino allocare un array in quel modo. Sarebbe più pulito un "new float[num_int]" e poi "delete [] int_tab". |
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Oct 2005
Messaggi: 298
|
Quote:
Ti ringrazio per la risposta |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:39.




















