www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/09/10/19:03:08

From: "Jesper Lund" <jl1204 AT worldonline DOT dk>
Newsgroups: comp.os.msdos.djgpp
References: <Pine DOT SUN DOT 3 DOT 91 DOT 1010910090923 DOT 18194E-100000 AT is> <003201c13a3f$053b2f40$aa7ba8c0 AT fuego>
Subject: Re: Can You help me about djgpp with c++
Lines: 71
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.00.2615.200
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200
Message-ID: <5Bbn7.6249$9V5.360511@news000.worldonline.dk>
Date: Tue, 11 Sep 2001 00:58:08 +0200
NNTP-Posting-Host: 213.237.1.108
X-Complaints-To: news-abuse AT wol DOT dk
X-Trace: news000.worldonline.dk 1000162753 213.237.1.108 (Tue, 11 Sep 2001 00:59:13 MET DST)
NNTP-Posting-Date: Tue, 11 Sep 2001 00:59:13 MET DST
Organization: Customer of Tiscali A/S (World Online)
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Gorden <gorden AT ms9 DOT url DOT com DOT tw> wrote in message
news:003201c13a3f$053b2f40$aa7ba8c0 AT fuego...

> I Buy a book (Teach Yourself C++, 3rd Edition By Herbert Schildt)  inside
> have a C++ smaple
>
> #include <iostream.h>
> #include <conio.h>
>
> class samp
> {
>   private:
>     int i;
>
>   public:
>      samp(void)   { cout << "constructor" << '\n'; }
>     ~samp(void)   { cout << "destructor " << '\n'; }
>     void set(int n) {  i = n ;  }
>     int  get(void ) { return i; }
>
> };
>
> int test(samp o)
> {
>   return o.get() * o.get();
> }
>
> void main(void)
> {
>   clrscr();
>
>   samp o;
>   o.set(10);
>   cout << test(o) << '\n';
> }
>
> The Book have result is
> constructor
> destructor
> 100
> destructor
>
> in borland c++ 3.01 the result is
> constructor
> destructor
> 100
> destructor
>
> But in djgpp the result is
> constructor
> destructor
> 100
> destructor
> destructor
>
> Why in djgpp 3 times call destructor, I try compile on borland C++ 3.01
have
> 2 times call destructor
> Is djgpp or gpp error ??????????
>

Apparently, gcc makes TWO copies of your samp object when it is passed as a
value argument to the test(samp o) function (and Borland only one). I don't
think that the C++ standard guarantees that only one copy of your object is
made in this situation (but I could be wrong here?). By the way, it seems
that if you define your own copy constructor (instead of relying on the one
generated implicitly by the C++ compiler), only one copy of the samp object
is made.



- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019