ch14_3.cpp
Upload User: gzy2011
Upload Date: 2021-02-09
Package Size: 20k
Code Size: 1k
Development Platform:

Visual C++

  1. //ch14_3.cpp
  2. //关于浅拷贝和深拷贝:p320-p322
  3. #include"iostream.h"
  4. #include<string.h>
  5. class Person
  6. {
  7. public:
  8. Person(char* pN){
  9. cout<<"constructing"<<pN<<endl;
  10. pName=new char[strlen(pN)+1];
  11. if(pName!=0){
  12. strcpy(pName,pN);  
  13. }
  14. }
  15. Person(Person& p){  //自定义拷贝构造函数,实现深拷贝:不但复制了
  16. //对象空间,而且复制了资源(堆内存空间)
  17. cout<<"copying"<<p.pName<<"into its own block.n";
  18. pName=new char[strlen(p.pName)+1];
  19. if(pName!=0){
  20. strcpy(pName,p.pName);  
  21. }
  22. }
  23. ~Person()
  24. {
  25.  cout<<"destructing"<<pName<<endl;
  26.  pName[0]='';
  27.  delete pName;
  28. }
  29. protected:
  30. char* pName;
  31. };
  32. void main(void)
  33. {
  34.  Person p1("Randy");
  35.  Person p2=p1; //即Person p2(p1);
  36.  //调用自定义拷贝复制构造函数,为p2另分配资源(而不是像浅拷贝那样共享p1
  37.  //资源)。这样,程序结束时先后析构p2和p1,析构函数才不会出错。
  38. }