PDA

View Full Version : [C++] gestione memoria.


tglman
29-05-2007, 12:17
Boungiorno come si evince dal titolo volevo chiarire dei miei dubbi sulla gestione della memoria in c++, iniziamo col dire che al contrario di come pensate ;) la gestione dinamica è chiarissima, il problema sta nella gestione statica.

se io ho una classe del tipo :

class Pippo
{
Pluto _pluto;
}


il mio dubbio è al momento che instanzio Pippo, ho gia un'istanza di pluto?

vizzz
29-05-2007, 12:24
Boungiorno come si evince dal titolo volevo chiarire dei miei dubbi sulla gestione della memoria in c++, iniziamo col dire che al contrario di come pensate ;) la gestione dinamica è chiarissima, il problema sta nella gestione statica.

se io ho una classe del tipo :

class Pippo
{
Pluto _pluto;
}


il mio dubbio è al momento che instanzio Pippo, ho gia un'istanza di pluto?

si :)

andbin
29-05-2007, 12:45
il mio dubbio è al momento che instanzio Pippo, ho gia un'istanza di pluto?Premesso che il C++ non mi piace e lo conosco poco (ormai sono affetto da Javaite acuta ...), la risposta è sì, hai già una istanza. Dopotutto non potrebbe essere altrimenti, visto che non hai a che fare con un puntatore.

Se provi:
#include <iostream>

using namespace std;

class Pippo
{
public:
Pippo();
};

Pippo::Pippo (void)
{
cout << "costruttore Pippo" << endl;
}

class Prova
{
private:
Pippo p;
};

int main (void)
{
Prova prova;

return 0;
}Stampa: costruttore Pippo

tglman
29-05-2007, 13:29
Allora il dubbio adesso viene con le stringhe:

so ho:

class Pippo
{
private:
std::string _name;
public:
Pippo(std::string name);
}

Pippo::Pippo(std::string name)
{
_name=name;
}


cosa succede cosi ??
e se invece di std::string o il mio vecchio pluto che succede ??

vizzz
29-05-2007, 15:01
Allora il dubbio adesso viene con le stringhe:

so ho:

class Pippo
{
private:
std::string _name;
public:
Pippo(std::string name);
}

Pippo::Pippo(std::string name)
{
_name=name;
}


cosa succede cosi ??
e se invece di std::string o il mio vecchio pluto che succede ??

così inizializzi la stringa membro privata della classe non appena istanzi la classe, lo stesso per pluto.

tglman
29-05-2007, 15:24
ok capito questo continuo con la lezione ;)
quello di prima più questo.

Pippo::setPluto(Pluto pluto)
{
_pluto=pluto
}

che succede ??

andbin
29-05-2007, 15:38
ok capito questo continuo con la lezione ;)
quello di prima più questo.

Pippo::setPluto(Pluto pluto)
{
_pluto=pluto
}

che succede ??Qui dipende ... facendo l'assegnazione per default vengono copiati tutti i campi della classe pari pari così come sono. Se però un campo è un puntatore ... ahi! Bisogna vedere cosa ci devi fare e come lo devi gestire. In questi casi si crea un "costruttore di copia", in modo da gestire la copia come si vuole realmente.