🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #16904

Re: C++ functie aanroep vraagje

#16904
From: Koen Deforche
Date: Thu, 09 Mar 2000 00:00
48 lines
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-mail
References: <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