Newsgroup: it.comp.lang.c++
Titolo: Istanziamento di un oggetto

L'altro giorno a lezioni di fondamenti il docente ha spiegato che
l'istanziamento di un oggetto da una classe comporta l'implicita allocazione
di memoria tramite l'operatore new.
Ora, poichè, sempre sulla base delle dicerie di costui, l'operatore new
alloca memoria nella parte heap, quella gestita dal programmatore, mi
chiedevo se anche le classi venissero allocate nella memoria heap oppure
inquella stack, come le normali variabili.
Grazie mille.
Cesare

inquella stack, come le normali variabili.
- Le classi possono essere allocate sullo stack
  oppure sullo heap.
- Anche le variabili "normali" possono essere
  allocate sullo heap. Non capisco che distinzione
  stai facendo.
- L'allocazione sullo heap non e' mai implicita
  ma richiede l'uso esplicito degli operatori
  "new" o "new[]".
- Gli operatori "new"/"new[]" di solito ottengono
  la memoria necessaria chiamando implicitamente
  funzioni globali denominate "operator new" /
  "operator new[]". Queste funzioni possono pero'
  essere ridefinite dalla classe:
  class X
  {
    void *operator new(size_t);
    void operator delete(void *,size_t);
  };
  void foo()
  {
    X * i = new X;    // Chiama X::operator new
    X * a = new X[3]; // Chiama ::operator new[]
    X * i2 = ::new X; // Chiama ::operator new
    delete i;         // Chiama X::operator delete
    delete[] a;       // Chiama ::operator delete[]
    ::delete i2;      // Chiama ::operator delete
  }
- Tu puoi definire queste funzioni globali di
  allocazione. Se non lo fai il programma usera'
  una definizione standard. E' garantito che
  l'implementazione della funzione malloc non
  si basa su "operator new" o "operator new[]"
  per ottenere memoria (quindi tu puoi usare malloc
  per ottenere memoria se decidi di scrivere i tuoi
  allocatori globali).
HTH
Andrea

Bisognerebbe sapere esattamente cosa ha detto il docente...
Dopo uno scambio di email ho avuto un puntatore che
ritengo interessante...
 
www.uniroma2.it/didattica
Alcuni dei documenti sul corso di informatica sono
esilaranti ... o per meglio dire *sarebbero* esilaranti
se non si trattasse di roba che viene usata *davvero*
per formare sul C++.
NB: 
  Non tutto e' cosi' terribile... ma ho il sospetto
  che se un malcapitato studente finisce nel corso
  sfigato rischia di rovinarsi per sempre :((

 ha scritto nel messaggio

sperando d'aver capito bene quello che chiedi...
Class1* ist1 = new Class1(...);
/* alloca un oggetto della classe Class1 in heap
da cancellare con delete*/
Class1 ist2;
/*alloca un oggetto della classe Class1 in stack
distruttore chiamato automaticamente alla fine del blocco
di codice dove e' dichiarata*/
come vedi uno stesso oggetto puo' essere sia in heap che in stack,
con vari asvantaggi e vantaggi. a te decidere.
concordo con Andrea per "l'allarme rosso" del tuo atteggiamento mentale
verso il prof
spero che tu, invece, con la frase
"mi chiedevo se anche le classi venissero allocate nella memoria heap"
non intendessi non oggetti ma vere e proprie "classi" da mettere da qualche
parte...
in tal caso le tue idee sono parecchio confuse... :-)
--
Ciao by Allanon
Q: Why do programmers always mix up Christmas and Halloween?
A: Because 25 Dec = 31 Oct

di memoria tramite l'operatore new.
Sbagliato. Una classe puň essere istanziata come una normalissima
variabile, ovvero senza l'utilizzo di memoria dinamica.
persona p(10,20);
non comporta allocazione dinamica, certo, il costruttore di questa
classe potrebbe internamente allocare memoria per i suoi membri, ma
questo é un altro discorso.
E' invece vero che ad una classe possono essere forniti degli overload
per gli operatori new , new[] (allocazione di un array), delete e
delete[] (distruzione di un array)che in tal caso si sostituiscono a
quelli globali, ma solo se un istanza della classe viene allocata
dinamicamente.
Il C++ permette comunque anche di overloadare gli operatore globali di
allocazione e distruzione della memoria, ma questa é un'operazione
decisamente di bassissimo livello che solitamente non si ha bisogno di
fare.
Il Ghenio
---------
// TODO: Place your ass here