Re: Copy C'tor - doubt
AY wrote:
I have a situation where I'm required to generate a copy of an object.
I have simplified the class into a tiny one, but in reality its a huge
class with multiple struct types as data member.
Here is my simplified class:
class AB
{
private:
int a;
public:
AB(int ar): a(ar){}
Make this
explicit AB(int ar)...
The point is that if a function expects an AB and you just call it with 42
as argument, that will automatically create and later on destroy an AB.
AB(const AB& arg)
{
a = arg.a;
}
Prefer initialization lists:
AB(AB const& arg): a(arg.a) {}
int main()
{
AB* ab = new AB(7);
//AB* cd = new AB;
AB* cd(ab);
This is equivalent to
AB* cd = ab;
My Qn is in the statement - AB* cd(ab);
Does object 'cd' uses the same memory as object 'ab' ?
No. Both 'ab' and 'cd' are distinct objects. Try this:
std::cout << "address of ab=" << static_cast<void*>(&ab) << std::endl;
std::cout << "address of cd=" << static_cast<void*>(&cd) << std::endl;
Is any memory allocated in the heap for 'cd' like 'ab' [ I do not
think, maybe I'm wrong ] ?
No, 'cd' is on the stack.
What happens here exactly.
You are copying a pointer object. Note: In addition to the two lines above,
try this:
std::cout
<< "address stored in ab=" << static_cast<void*>(ab) << std::endl
<< "address stored in cd=" << static_cast<void*>(cd) << std::endl;
The point is that they are distinct objects but that they are both pointers
to the same AB object. In other words, you never copied the object and your
question about the copy ctor is not.
If you have a Java background, where everything is allocated with 'new', you
must learn not to repeat that in C++ where it is wrong and unhealthy. Please
read a good book on C++, it will clean up that confusion.
Uli
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]