关于C++拷贝构造函数

来源:互联网 发布:淘宝客服业绩哪里查看 编辑:程序博客网 时间:2024/05/19 08:45

from http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/400259ead753c6ca?hl=en

 

  Chris Morley  View profile   More options Nov 20, 5:49 pm
Hi, 

 

> My Qn is in the statement  - AB* cd(ab); 

> Does object 'cd' uses the same memory as object 'ab' ? 
> Is any memory allocated in the heap for 'cd' like 'ab' [ I do not 
> think, maybe I'm wrong ] ?

cd is a pointer which is copy of the ab pointer, so yes they point to the 
same instance of the AB class. Your AB copy constructor is not called. No 
more memory is allocated. 

If you wanted to make a copy you need... 
AB* ef = new AB(*ab); 

With a few trace prints in your program you can easily see what is 
happening. The output on my machine for the following complete program: 

ab=0x6101a8, cd=0x6101a8 
copy constructor: my this=0x6201c0, arg=0x6101a8 
ab=0x6101a8, ef=0x6201c0 
copy constructor: my this=0x22ccbc, arg=0x6101a8 
ab=0x6101a8, gh=0x22ccbc 

//====================== 
#include <stdio.h> 

class AB { 
  int a; 
public: 
  AB(int ar): a(ar){} 
  AB(const AB& arg) { 
   printf("copy constructor: my this=%p, arg=%p/n", this, &arg); 
   a = arg.a; 
  } 

 

}; 
int main() { 
  AB* ab = new AB(7); 
  //AB* cd = new AB; 

  AB* cd(ab); // you have copied the pointer 
  printf("ab=%p, cd=%p/n",ab,cd); 

  AB* ef = new AB(*ab); // you have made a copy of the first AB 
  printf("ab=%p, ef=%p/n",ab,ef); 

  AB gh(*ab); // copy into local variable gh 
  printf("ab=%p, gh=%p/n",ab,&gh); 

  return 0; 

 

原创粉丝点击