Re: C++ 101 dumb question
- From: "Anthony Jones" <Ant@xxxxxxxxxxxxxxxx>
- Date: Thu, 21 Jun 2007 13:50:12 +0100
"David Webber" <dave@xxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:%23H5iJ5$sHHA.4796@xxxxxxxxxxxxxxxxxxxxxxx
of
"Anthony Jones" <Ant@xxxxxxxxxxxxxxxx> wrote in message
news:ukC%23bl$sHHA.4548@xxxxxxxxxxxxxxxxxxxxxxx
And you need to understand that copying a pointer is not the same ascopying
the thing it points to (and/or that the default copy constructor ofCMyClass
copies a pointer.)
Yep I do comprehend the difference between a pointer and the data it
points
to.
In that case, I suspect you have some other misconception about the fate
the data pointed to by all your char * pointers and/or what happens whenyou
include something like ...="Hello world" in the program.
What's a "default copy constructor" ?
If you have a CMyClass a;
The statements
CMyClass b = a;
or
CMyClass b(a);
invoke a "copy constructor" to construct b. If you don't provide one
explicitly,
What does the signature of a copy constructor look like?
CMyClass(CMyClass src);
OR
is it:-
CMyClass& operator=(CMyClass& src);
you are liable to get a default version of it supplied by thepointer
compiler. Its action is to copy the data members of the class, member by
member. If (as in your case) one of those members is a pointer, then
you'll create a copy of the pointer, and not a copy of the data it points
to. When that data goes out of scope, you'll find yourself with a
to junk.
Right I get that. What if the member was an instance of class that does
have it's own copy constructor would the default copy constructor call that
to copy the member or would it blindly copy the members of that object as
well? That to me is the critical question.
the
So if a class contains a pointer to data which it *owns*, then the copy
constructor must make a copy of the data and set its pointer to point at
copy. [There are string classes which come complete with copyconstructors
which manage all that. If you use standard nul-terminated strings as inC,
then you have to do it yourself.]
Ok got that.
benefit
(NB Functions which return a class will also call the copy constructor,
even though neither of the above statements occur explicitly in that form,
as a copy of the class being returned is placed on the stack for the
of the calling function. The same is true if you call a function with a
class as one of its arguments.)
Surely that could be optimised away. The existing object is already on the
stack. Are you saying a second copy gets added to the stack, then the
original has it's destructor called, then after returning execution to the
caller another copy is performed, then presumably this temporary copy in the
stack has it's destructor called?
Perhaps I'm showing my ignorance again but since the callee knows its to
return an object it has on the stack it could defer its destruction to the
caller. The caller could perform the copy constructor once then destroy the
object from the callee function.
Dave
--
David Webber
Author of 'Mozart the Music Processor'
http://www.mozart.co.uk
For discussion/support see
http://www.mozart.co.uk/mzusers/mailinglist.htm
.
- Follow-Ups:
- Re: C++ 101 dumb question
- From: David Wilkinson
- Re: C++ 101 dumb question
- From: Ben Voigt [C++ MVP]
- Re: C++ 101 dumb question
- References:
- C++ 101 dumb question
- From: Anthony Jones
- Re: C++ 101 dumb question
- From: David Webber
- Re: C++ 101 dumb question
- From: Anthony Jones
- Re: C++ 101 dumb question
- From: David Webber
- C++ 101 dumb question
- Prev by Date: Re: C++ 101 dumb question
- Next by Date: Re: C++ 101 dumb question
- Previous by thread: Re: C++ 101 dumb question
- Next by thread: Re: C++ 101 dumb question
- Index(es):
Relevant Pages
|