Newsgroup: it.comp.lang.c++
Titolo: Memoria heap

C'è modo di sapere se una variabile è allocata nella memoria heap oppure se
stà nello stack?
Il problema che ho è questo: ho una classe con un metodo al suo interno che
crea un buffer di elementi di un'altra classe allocati dinamicamente. A
causa di questo metodo, ho dovuto ridefinire il distruttore in maniera tale
che deallochi questi elementi, ma non tutti gli elementi creati dalla classe
sono allocati dinamicamente! C'è una soluzione oppure devo per forza fare in
modo che tutti gli elementi creati siano allocati nell'heap?
Cecco

 writes:

Usa uno std::auto_ptr, che viene deallocato automaticamente.
Cosa intendi per "buffer"?  Attenzione che ci sono (grossi) problemi a
creare containers (e.g. std::vectors) di auto_ptr, visto che i
containers vengono riempiti per copia e che gli auto_ptr, nei
confronti della copia, hanno un comportamento un anomalo; in questo
caso ti conviene usare qualche altro tipo (non standard) di smart
pointers, ad esempio dei counted pointers che deallochino l'oggetto
puntato quando il contatore torna a zero.  Per una ottima
implementazione di smart pointers, guarda sotto 
http://www.boost.org/
.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 creare containers (e.g. std::vectors) di auto_ptr
Beh, mi sono accorto di non essere stato preciso.  Containers di
suto_ptr sono *proibiti* dallo Standard, quindi, a rigore, se tu
tentassi di usarli il codice non dovrebbe nemmeno compilare; pero' i
compilatori che conosco (ad esempio g++ 3.0 e KCC) non si comportano
correttamente a questo riguardo.
Per essere ancora piu' preciso, i problemi nascono dal fatto che,
internamente alla Standard Library, ogni implementazione e' libera di
usare tutti i meccanismi che vuole; compresa la copia degli oggetti
contenuti.  E questo, nel caso degli auto_ptrs, vuol dire
trasferimento della proprieta' dell'oggetto puntato, ed azzeramento
dell'auto_ptr copiato; e' quest'ultimo fatto che genera (grossi) guai.
Il tutto confortato da una recente lettura di Scott Meyers, "Effective
STL"; l'ultimo di una serie di tre libri che non dovrebbero mancare
dalla biblioteca di un programmatore C++.


 modo che tutti gli elementi creati siano allocati nell'heap?
Non sono certo di aver capito bene. Ho capito questo: tu hai un qualche
tipo di array (immagino sia questo che tu intenda con 'buffer') che
contiene puntatori a oggetti; alcuni di questi oggetti sono allocati nello
heap, mentre altri sono oggetti automatici; a un certo punto devi ripulire
tutto dellocando ovviamente soltanto gli oggetti allocati dinamicamente;
come fai a distinguerli dagli altri?
Potresti aggiungere un flag al costruttore che segnali all'oggetto se lo
si sta allocando dinamicamente, quindi definisci un metodo (diciamo che lo
chiamiamo destroy()), che faccia più o meno così:
 
  void destroy()
  { if( i_am_dynamically_allocated_ ) delete this;
   }
Quando pulisci l'array invochi destroy() su tutti gli oggetti.
Max

 dalla biblioteca di un programmatore C++.
dato per scontato che il primo e' lo Stroustrup (ho indovinato?), quale e' 
il secondo? 
Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

il secondo? 
Veramente Maurizio si riferisce a
  1) Effective C++
  2) More Effective C++
  3) Effective STL
che sono tre libri scritti da Scott Meyers.
Anche secondo me sono libri che meritano molto; non sono
libri per chi comincia... ma le spiegazioni sono molto
chiare e Meyers e' un autore che si fa leggere bene.
Fra l'altro dei primi due esiste una versione unificata
su CD (Effective C++ CD) che e' quella che ho preso io
(e che consiglio).
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 il secondo? 
Io intendevo i tre libri di Meyers, "Effective C++", "More effective
C++" and "Effective STL".  Parlando di libri, quelli che tendo ad
utilizzare piu' spesso sono "The Standard C++ library" (Josuttis) e,
appunto, Stroustrup.  A parte la trilogia di Tolkien e quella di Knuth
(sempre consultate) ed il Kernighan and Ritchie (che pero' non prendo
piu' in mano da un paio d'anni) sono i libri piu' consumati in casa...


Ti mancano solo la trilogia galattica di Asimov e quella della Guida
Galattica per Autostoppisti di Adams :-)
Ciao,
Nicola

 Galattica per Autostoppisti di Adams :-)
Le ho, le ho.  Vergogna, pero'; l'ultima e' una TETRALOGIA: "The
hitch-hiker's guide to the galaxy", "The restaurant at the end of the
universe", "Life, universe and everything" e "So long, and thanks for
all the fish".  E smettiamo subito, se no arriva subito il post
automatico di off-topic :-)
"In the beginning the Universe was created. This has made a lot of
people very angry and has been widely regarded as a bad move."
(Zaphod Beeblebrox)


 automatico di off-topic :-)
In realta' e' una Pentalogia: c'e' anche "Mostly harmless" (Il piu'
brutto di tutti). In effetti stavo per scrivere "l'unica trilogia in
cinque volumi".
Ciao,
Nicola
P.S. La pianto, la pianto :-)

 cinque volumi".
Se e' per questo anche la trilogia galattica di IA e' ... cresciuta. Al punto
che praticamente si e' perso il conto (se poi consideriamo il "raccordo" con i
romanzi robotici e gli altri romanzi "collaterali" aventi "ambientazione
galattica" pur non parlando direttamente delle fondazioni ...).
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 galattica" pur non parlando direttamente delle fondazioni ...).
Lo so, ma i seguiti sono talmente peggio degli originali che non li
considero neanche, salvo forse "L'orlo della Fondazione" e "I robot
dell'alba".
Ciao,
Nicola

   3) Effective STL
mi potete fare un velocissimo sunto degli argomenti trattati? Ho quasi 
finito "Algoritmi in C" e devo trovare un nuovo libro da leggere...


 >   3) Effective STL
I primi due sono raccolte di consigli pratici su come usare il C++ in
modo efficace, evitando le trappole piu' comuni. Si leggono facilmente e
sono imperdibili. Il terzo non l'ho ancora comprato.
Ciao,
Nicola

> finito "Algoritmi in C" e devo trovare un nuovo libro da leggere...
:-) Asimov,I. "Foundation" (Cronache della galassia).


 wrote in message
news:3B8363DC...@divalsim.it...

"I robot dell'alba" non e' un seguito al ciclo della fondazione. Semmai un
"seguito" al ciclo robotico. Comunque l'unico a non soddisfarmi del tutto e'
"Fondazione e terra". Troppo "lento". Quasi non sembra scritto da IA.
Invece mi e' piaciuto "Isaac Asimov's Caliban (Il Calibano di Asimov)" di Roger
McBride Allen, che fa parte di una trilogia robotica (per gli altri due titoli
sostituire "Inferno" e "Utopia" a "Calibano") che si aggiunge a quella di IA
(mantenendone lo stile!). Spero di trovare gli altri presto!
Non ho letto "Foundation's Fear (Fondazione - La Paura)" di Gregory Benford,
"Foundation and Chaos" di Greg Bear e "Foundation's Triumph" di David Brin.
Stando alle recensioni, pur essendo ambientati nel mondo di IA (starebbero prima
della trilogia ma dopo "Forward the Foundation" e risolverebbero alcune "lacune"
lasciate dal Mito) non hanno lo stile di IA. Hanno lo stile di G.Benford, G.Bear
e D.Brin, appunto. Credo che li leggero'. Se non altro mi sono piaciuti altri
romanzi che ho letto di Benford.
Per chi fosse interessato alle saghe di IA, brevemente:
I racconti brevi sui Robot (anni '40 e '50) raccolti in:
-) The Complete Robot (Tutti i miei Robot)
fanno da "cappello" alla trilogia robotica composta da due romanzi degli anni
50:
-) The Caves of Steel (Abissi d'acciaio)
-) The Naked Sun (Il sole nudo)
e da un richiestissimo seguito nei primi anni '80
-) The robots of dawn (I robot dell'alba)
Piu' tardi, sempre negli anni '80, il romanzo che "raccorda" il ciclo robotico a
quello dell'impero:
-) Robots and Empire (I Robot e l'Impero)
La trilogia imperiale e' degli anni '50
-) The currents of space (Le correnti delo spazio)
-) Pebble in the sky (Paria dei cieli)
-) The stars, like dust (Il tiranno dei mondi)
Pur non essendo direttamente raccordati, l'immagine dell'impero che fa da sfondo
a questa trrilogia riprende quella che Asimov aveva usato nei racconti brevi
pubblicati negli anni '40 e successivamente ('50) raccolti in tre tomi che
compongono la famosissima "Trilogia della fondazione". La serie della fondazione
viene poi arricchita fino a comprendere ben 7 volumi. Il risultato e':
fine anni '80. il preludio:
-) Prelude to Foundation (Preludio alla fondazione)
anni 90, pubblicato postumo:
-) Forward the Foundation (Fondazione, anno zero)
anni 50: la trilogia (di fatto tre raccolte di romanzi piu' brevi pubblicati
negli anni '40)
-) Foundation (Cronache della galassia)
-) Foundation and empire (Il crollo della Galassia centrale)
-) Second Foundation (L'altra faccia della spirale)
inizio anni '80, due seguiti
-) Foundation's edge (L'orlo della Fondazione)
-) Foundation and earth (Fondazione e terra)
A margine andrebbero citati:
-) The Bicentennial Man (L'uomo Bicentenario)
che e' correlato alla serie robotica pur non avendo la stessa ambientazione e la
relativa "romanzizzazione" a quattro mani (I.Asimov e R.Silverberg):
-) The Positronic Man (Robot NDR-113)
che non ho ancora letto. Cosi' come non ho letto la serie in sei volumi (scritta
da altri ma coordinata da IA) conosciuta come "Robot City".
E per finire, un link interessante e completo sul mondo positronico (mitica la
cronologia universale che trovate in fondo alla pagina!):
http://www.delos.fantascienza.com/delos55/robot-asimov.html


 romanzi che ho letto di Benford.
Io ho letto Fondazione La Paura. Consiglio di lasciarlo sugli scaffali.
Come continuazione del ciclo della Fondazione non ha alcun senso: si
sviluppa nello stesso periodo di Anno Zero (che è successivo, credo),
introducendo concetti che di asimoviano non hanno niente (i tunnel per le
astronavi non si sono mai visti, Nemesis confuta) e trasformando Hari Seldon
in un superuomo. Certe scene, ad esempio le coscienze di Hari e Dors
intrappolate nei corpi di due scimpanzè, sconfinano persino nel ridicolo, e
non hanno nessuna finalità. L'introdurre poi un nemico alieno come le
Nebbie, che compare solo a fine libro senza nessuno scopo apparente... per
non parlare delle simulazioni di Voltaire e Giovanna d'Arco, co-protagoniste
in parallelo a Seldon e Dors...
Insomma, se volete leggetevelo, ma scordatevi di trovarci un posto
'coerente' nel ciclo asimoviano.