c++拷贝方面的问题(深、浅拷贝,为何拷贝构造函数传const引用)

为什么C++拷贝构造函数的参数必须是const引用,有什么作用?

  • 原因:传值的方式会调用该类的拷贝构造函数,从而造成无穷递归地调用拷贝构造函数。因此拷贝构造函数的参数必须是一个引用。
    Student(Student& s);

深拷贝和浅拷贝(下图很明确)

  • 浅拷贝
    这里写图片描述

  • 深拷贝(对象和资源一起拷贝)
    这里写图片描述

 #include <iostream>
 #include <string.h>
 using namespace std;
 class person
{    
public:
    Person(char* pN)
    {
     cout <<"Constructing"<<pN <<endl; 
     pName=new char[strlen(pN)+1];       
     if(pName!=0)
     {       
        strcpy(pName,pN);
      }
    }
      //...
protected:
    char* pName;   
};
Person::Person(Person& p)
{
  pName=new char[strlen(p.pName)+1];
  if(pName!=0)
  {
      strcpy(pName,p.pName);
  } 
}
//拷贝资源的内容,因此是深拷贝;
发布了30 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/fzl_blog/article/details/69487298