Article View: be.comp.programming
Article #16904Re: C++ functie aanroep vraagje
From: Koen Deforche
Date: Thu, 09 Mar 2000 00:00
Date: Thu, 09 Mar 2000 00:00
48 lines
2864 bytes
2864 bytes
Bernhard Dobbels wrote: > > Kurt Lefevre <kurt.lefevre@capitalmarketscompany.com> wrote: > >Geen van beiden: > >In object moet const zijn. Dit vermijdt dat je ongewild het object kan > >wijzigen in de method. > >Verder is de gebruikelijke manier een ref naar het out object als return > >value. > > en zojuist heb ik geleerd dat dit geen 'propere' methode is. > Als je een ref naar een object teruggeeft, dan heb je dat object aangemaakt > in de functie. Het object moet later gedeleted worden, en dat zal dan op een > ander niveau in je programma moeten zijn (niet in die functie) en dat mag niet, > want op het einde van de functie wordt de destructor automatisch aangeroepen. > De goede methode is dus altijd uw object aan te maken in de oproepende functie > en een 'object& const objectname': een constante referentie naar een variabel > object. ofwel: const object funktie(const object& object_in); ofwel: void funktie(const object& object_in, object& object_out); ofwel: object *funktie(const object& object_in); ofwel: object& method(const object& object_in); waarom? - het eerste gebruik je als 'object' klein is en/of het extra copieren geen kwaad kan (bvb. wanneer snelheid niet over-belangrijk is), en object heeft een copy-constructor. - het tweede gebruik je in de andere gevallen - het derde gebruik je als de funktie een 'maker' is van dingen (op de heap), en met de pointer duid je aan dat de gebruiker verantwoordelijk wordt voor destructie (via afspraak). - het vierde gebruik je als de funktie een referentie teruggeeft naar bestaande data (bvb. ergens opgezocht), die je niet wil copieren (omdat het dan zijn zin verliest bvb de gebruiker wil erin kunnen wijzigen of omdat het een groot object is en snelheid is belangrijk (maar dan zou het eerder een const object& zijn dat ge-returned wordt)). het 4de is gebruikelijker bij methods waar er impliciet lokale data aanwezig is. (dit zijn maar vuistregels die ik gebruik, YMMV). koen.
Technical Details
Message-ID:
<38C7F631.BF2F24E7@easics.be>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<slrn8b72vu.9ea.Bernhard@Viking.tvd.KotNet.Org> <893bfb$b98$1@newnews1.news.nl.uu.net> <slrn8bchf4.1ce.Bernhard@Viking.tvd.KotNet.Org>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,856a015e68b228fd X-Google-Attributes: gidfcea4,public From: Koen Deforche <koen@easics.be> Subject: Re: C++ functie aanroep vraagje Date: 2000/03/09 Message-ID: <38C7F631.BF2F24E7@easics.be> X-Deja-AN: 595275912 Content-Transfer-Encoding: 7bit References: <slrn8b72vu.9ea.Bernhard@Viking.tvd.KotNet.Org> <893bfb$b98$1@newnews1.news.nl.uu.net> <slrn8bchf4.1ce.Bernhard@Viking.tvd.KotNet.Org> X-Accept-Language: en Content-Type: text/plain; charset=us-ascii X-Complaints-To: newsmaster@kpnqwest.net X-Trace: nreader1.kpnqwest.net 952628786 193.74.198.7 (Thu, 09 Mar 2000 20:06:26 MET) Organization: Easics nv, Leuven, Belgium, http://www.easics.com MIME-Version: 1.0 NNTP-Posting-Date: Thu, 09 Mar 2000 20:06:26 MET Newsgroups: be.comp.programming