🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #8819

Re: vraag pointers

#8819
From: Dominique Devriese
Date: Mon, 03 Jun 2002 20:22
64 lines
3384 bytes
"Christophe" <just.chillNOSPAM@pandora.be> writes:

> beste,
> in C++ is het gebruik van pointers heel frequent.
> 
> Weet er iemand daarbij het verschil tussen werken in
> 1. globale naamruimte
> 2. vrije opslagruimte
> 
> ?
> bedankt

zou het kunnen dat je het verschil tussen data "on the heap" en "on the
stack" bedoelt ?
On the stack is dit:
<c++-code>
        int i;
</c++-code>
je hebt nu een variabele die je kan gebruiken, van het type 'int', die
je kan veranderen, gebruiken etc.
Het voordeel is dat de ruimte die deze variabele gebruikt automatisch
vrijgegeven wordt, van zodra deze buiten 'scope' komt.
Het nadeel van deze techniek is echter dat je op voorhand (terwijl je
het programma schrijft) moet weten hoeveel opslagruimte je nodig
hebt. 
Als je een variabele hoeveelheid geheugen nodig hebt, moet je je data
"on the heap" plaatsen:
<c++-code>
        int* i = new int;
</c++-code>
je hebt nu een int die zich "on the heap" bevindt.  de variabele i is
een pointer, die wijst naar de plaats waar de nieuwe int zich bevindt.
merk op dat de variabele i zelf (die dus als waarde het geheugenadres
van je net gecre�erde int heeft), nog steeds "on the stack" is.
Het nadeel van deze techniek is dat je het geheugen zelf terug moet
vrijgeven:
<c++-code>
        int* i = new int;
        *i = 5;
        cout << *i << endl;
        delete i;
</c++-code>
Als je dit niet doet, blijft het besturingssysteem denken dat jij het
geheugen in kwestie nodig hebt, en heb je dus een "memory leak".
Er komen ook problemen voor als je probeert te werken met
geheugenruimte die je net hebt vrijgegeven met delete.
Het voordeel van deze techniek is echter dat je programma zelf kan
bepalen hoeveel geheugen hij nodig heeft (vb. een editor weet pas hoe
groot een bestand is als hij het ingeladen heeft).
<c++-code>
        int aantal_lijnen_in_bestand = 5;
        class Lijn;
        Lijn* lijnen = new Lijn[aantal_lijnen_in_bestand];
        doe_iets_nuttig_met_je_lijnen (lijnen);
        delete [] lijnen;
</c++-code>
Je hebt hier een variabele gecre�erd die 5 Lijn-variabelen bevat.  Je
kan deze bekijken met "lijnen[0]" t.e.m. "lijnen[4]". 

dat was het zowat...
ik zou zeggen: zoek eens een goeie tutorial (hm... dat had ik beter in
het begin kunnen zeggen, lijkt me nu...:)
sjuus
domi
Technical Details
Message-ID: <87n0ucyuxd.fsf@pandora.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!supernews.com!news-x2.support.nl!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <tmuK8.10228$ud.612@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII
X-Google-Thread: fcea4,56a17df510f27d87
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2002-06-03 13:22:13 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!supernews.com!news-x2.support.nl!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
Sender: domi@living
Newsgroups: be.comp.programming
Subject: Re: vraag pointers
References: <tmuK8.10228$ud.612@afrodite.telenet-ops.be>
From: Dominique Devriese <fritmebufstek@pandora.be>
Message-ID: <87n0ucyuxd.fsf@pandora.be>
Lines: 64
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8bit
Date: Mon, 03 Jun 2002 20:22:10 GMT
NNTP-Posting-Host: 213.118.141.253
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1023135730 213.118.141.253 (Mon, 03 Jun 2002 22:22:10 MET DST)
NNTP-Posting-Date: Mon, 03 Jun 2002 22:22:10 MET DST
Organization: Telenet Internet