PDA

View Full Version : [C++] allocare memoria dinamica per un oggetto


19semplicemente
28-07-2005, 18:14
è possibile utilizzare un costruttore e un distruttore per allocare e liberare memoria dinamica?

se si, come si fa?

grazie

RaouL_BennetH
28-07-2005, 18:27
è possibile utilizzare un costruttore e un distruttore per allocare e liberare memoria dinamica?

se si, come si fa?

grazie

io non lo so, ma posso provare a passarti un link che ho trovato:

http://www.bo.cnr.it/corsi-di-informatica/corsoCstandard/Lezioni/24Alldinamica.html

19semplicemente
28-07-2005, 18:46
il mio prof se non erro, ad un esame chiese di scrivere un costruttore e un distruttore per allocare e liberare memoria.. ma non so come fare.. ne da dove iniziare...

fek
28-07-2005, 19:43
è possibile utilizzare un costruttore e un distruttore per allocare e liberare memoria dinamica?

se si, come si fa?

grazie


Non solo e' possibile, ma e' molto consigliato.

Stabilisci una regola per te stesso che recita: "l'oggetto che alloca della memoria o crea un altro oggetto deve anche occuparsi della loro distruzione".

19semplicemente
28-07-2005, 19:46
e come si fa?! puoi aiutarmi?

fek
28-07-2005, 19:51
e come si fa?! puoi aiutarmi?

Certo.


class SimpleIntVector
{

public:

SimpleIntVector(int size)
{
mData = new int[size];
}

~SimpleIntVector()
{
delete[] mData;
}

int* GetData(void) const
{
return mData;
}

private:
int* mData;
};


Ehm... GetData() non e' molto elegante, ma ho troppo sonno per scrivere il resto del codice :)

Perche' uso delete[] e non delete?

19semplicemente
28-07-2005, 19:56
xkè è un vettore...

19semplicemente
28-07-2005, 19:57
e se fossero stringhe come sarebbe?

fek
28-07-2005, 20:11
xkè è un vettore...

E' un esempio.

e se fossero stringhe come sarebbe?


char* aString = new char[100];

// ...

delete[] aString;

19semplicemente
28-07-2005, 20:20
ho scritto questo programmino.. e funziona.. però ho un dubbio..

scusa la domanda: ma a questo punto lui continua ad allocare ogni volta ch io creo un oggetto. cioè scrivere
char *nome = new char[50];
significa dire al compilatore che sino a quando vive quell'oggetto lui deve allocare dinamicamente nome, giusto?


#include <iostream>
#include <new>

using namespace std;

class prova{
private:
char* nome, *cognome;

public:

prova(char *n, char *c)
{
nome = new char[20];
cognome = new char[20];

nome = n;
cognome = c;

cout << nome << " " << cognome;
}

~prova()
{
delete[] nome;
delete[] cognome;
}


};

int main(){
prova uno("ciao", "mamma");

return 0;
}

ghiotto86
28-07-2005, 20:31
ho scritto questo programmino.. e funziona.. però ho un dubbio..

scusa la domanda: ma a questo punto lui continua ad allocare ogni volta ch io creo un oggetto. cioè scrivere

significa dire al compilatore che sino a quando vive quell'oggetto lui deve allocare dinamicamente nome, giusto?

quetso significa che appena crei un istanza della classe, le variabili membro sono allocate dinamicamente e devono essere necessariamente deallocato com ti ha detto fek (questo grazie al distruttore che hai fatto).
altro discorso poi ha l'allocazione dinamica di oggetti.
ciauz

ghiotto86
28-07-2005, 20:33
ah ti consiglio di usare la classe string quando implementi programmi con stringhe. è molto flessibile come classe e ti risparmi le complicazioni anche di leggibilità deggli array di char

19semplicemente
28-07-2005, 23:49
non l'ho mai vista come classe.. come funziona?

ghiotto86
29-07-2005, 11:37
non l'ho mai vista come classe.. come funziona?

bhe è molto semplice da usare anche perchè ci sono dei metodi particolare per manipolare le stringhe.

http://www.msoe.edu/eecs/ce/courseinfo/stl/string.htm

vai qui c'è tutto quello che devi sapere