Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C++ Moderated > Re: copy constr...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 10 of 10 Topic 9503 of 10096
Post > Topic >>

Re: copy constructor not being called

by Marcin Swiderski <sfider.best@[EMAIL PROTECTED] > Apr 17, 2008 at 03:47 AM

On 16 Kwi, 19:34, Chris Uzdavinis <cuz...@[EMAIL PROTECTED]
> wrote:
> On Apr 16, 1:22 am, Marcin Swiderski <sfider.b...@[EMAIL PROTECTED]
> wrote:
>
> > On 15 Kwi, 20:33, suresh <suresh.amritap...@[EMAIL PROTECTED]
> wrote:
>
> > >    base b1 = 'x'; //why copy constructor not called here?
>
> > This line calls base(const char) constructor and that is the correct
> > behaviour. This sytanx means that object b1 is initialized with
> > value 'x'. It's equivalent to:
>
> > base b1('x');
>
> It's NOT equivalent, it only seems so most of the time.
>
You learn something every day. I've done a little experiment:

# include <iostream>

class A {
public:
     A(int i) {
         std::cout << "Conversion from integer\n";
     };
private:
     A(const A& rhs) {
         std::cout << "Copy construction\n";
     };
};

int main() {
     A a = 1;
     return 0;
}

This will fail to compile (under gcc 3.4.4) with
the following error:

cnstr.cpp:9: error: `A::A(const A&)' is private

If you delete 'private:' it will compile, but it won't
use the copy constructor.

Furthermore, I've found an example where the use of each
one of the two initialization notations will give a different
output (also under gcc 3.4.4):

# include <iostream>

class B;

class A {
public:
     A() {
         std::cout << "Default construction\n";
     }
     A(const B& b) {
         std::cout << "Conversion from B\n";
     }
     A(const A& rhs) {
         std::cout << "Copy construction\n";
     }
};

class B {
public:
     operator A() {
         std::cout << "Conversion to A\n";
         return A();
     }
};

int main() {
     B b;
     A a = b;
     A c(b);
     return 0;
}

This program will output:

Conversion to A
Default construction
Conversion from B

Cheers
Sfider

-- 
      [ See http://www.gotw.ca/resources/clcm.htm
for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]
 




 10 Posts in Topic:
copy constructor not being called
suresh <suresh.amritap  2008-04-15 12:33:42 
Re: copy constructor not being called
dimitry.ivanov@[EMAIL PRO  2008-04-15 23:19:01 
Re: copy constructor not being called
d04rp@[EMAIL PROTECTED]   2008-04-15 23:20:45 
Re: copy constructor not being called
David Pol <david@[EMAI  2008-04-15 23:22:50 
Re: copy constructor not being called
Chris Uzdavinis <cuzda  2008-04-15 23:21:49 
Re: copy constructor not being called
Marcin Swiderski <sfid  2008-04-15 23:22:43 
Re: copy constructor not being called
Francis Glassborow <fr  2008-04-16 11:33:30 
Re: copy constructor not being called
Chris Uzdavinis <cuzda  2008-04-16 11:34:41 
Re: copy constructor not being called
Ron Natalie <ron@[EMAI  2008-04-16 15:44:47 
Re: copy constructor not being called
Marcin Swiderski <sfid  2008-04-17 03:47:55 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Tue Oct 14 8:32:17 CDT 2008.