View Full Version : [C++] gestione memoria.
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?
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 :)
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
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 ??
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.
ok capito questo continuo con la lezione ;)
quello di prima più questo.
Pippo::setPluto(Pluto pluto)
{
_pluto=pluto
}
che succede ??
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.