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

From: "A. Sinan Unur" <asu1 AT cornell DOT edu>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Can You help me about djgpp with c++
Date: 10 Sep 2001 23:28:22 GMT
Organization: Cornell University
Lines: 81
Sender: asu1 AT cornell DOT invalid (on slip-32-102-40-254.ny.us.prserv.net)
Message-ID: <Xns9118C615515F0ASINANUNUR@132.236.56.8>
References: <Pine DOT SUN DOT 3 DOT 91 DOT 1010910090923 DOT 18194E-100000 AT is> <003201c13a3f$053b2f40$aa7ba8c0 AT fuego>
NNTP-Posting-Host: slip-32-102-40-254.ny.us.prserv.net
X-Trace: news01.cit.cornell.edu 1000164502 16129 32.102.40.254 (10 Sep 2001 23:28:22 GMT)
X-Complaints-To: usenet AT news01 DOT cit DOT cornell DOT edu
NNTP-Posting-Date: 10 Sep 2001 23:28:22 GMT
User-Agent: Xnews/4.06.22
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
news:003201c13a3f$053b2f40$aa7ba8c0 AT fuego: 

> I Buy a book (Teach Yourself C++, 3rd Edition By Herbert Schildt) 
> inside have a C++ smaple

I modified your code as follows:

#include <iostream>

class Sample
{
  private:
    int i;

  public:
     Sample()   { std::cout << "Constructor" << std::endl; }
	 
	 Sample(const Sample& src) 
	 { 
		 i = src.i;
		 std::cout << "Copy constructor" << std::endl;
	 }

	 Sample& operator=(const Sample& rhs)
	 {
		 if( &rhs != this )
		 {
			 i = rhs.i;
		 }

		 std::cout << "Assignment operator" << std::endl;

		 return *this;
	 }
	 
    ~Sample()   { std::cout << "Destructor " << std::endl; }
	
    void set(int n) {  i = n ;  }
    int  get(void ) { return i; }

};

int test(Sample o)
{
  return o.get() * o.get();
}

int main(void)
{
  Sample aSample;
  aSample.set(10);
  std::cout << test(aSample) << std::endl;

  return 0;
}

When compiled and run, this code produces the following:

C:\var>gpp t.cc -o t.exe -Wall

C:\var>t
Constructor
Copy constructor
Destructor
100
Destructor

You can see that your original code was missing the copy constructor, and 
the compiler was creating an extra copy for the test function call. 
Incidentally, compiling your original code with -O3 gets rid of this extra 
copy.

I guess the compiler, in the absence of aggressive optimization or a copy 
constructor is creating am extra temporary.

Sinan.
-- 
--------------------------------
A. Sinan Unur
http://www.unur.com/

- Raw text -


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