编程爱好者联盟 2016-09-30
拷贝构造函数就是以拷贝的方式来构造一个新对象的构造函数
class 类名{ 类名(const 类名& 对象引用){ 拷贝构造函数体 } }
把一个对象传入一个非引用类型的值参数时
void test(A a){}
把一个对象作为函数的返回值的时候
A getA(); getA(); A b=getA();
//自定义拷贝构造 #include<iostream> #include<cstring> using namespace std; class Student{ char* m_name; int m_age; public: //实现有参的构造函数 Student(const char* name,int age):m_name(NULL),m_age(age){ // m_name=name; //语法可以,但如果指向的被释放了,m_name就成了dangling pointer,高风险 //申请一块动态内存给成员变量m_name; m_name=new char[strlen(name)+1]; //这才是好方法 strcpy(m_name,name); } ~Student(){ delete[] m_name; //不是delete,是delete[] m_name=NULL; } //打印所有属性信息 void show(void){ cout<<"I am "<<m_name<<", "<<m_age<<"years old"<<endl; } //自定义拷贝函数实现深拷贝 Student(const Student& rs):m_name(NULL),m_age(rs.m_age){ m_name=new char[strlen(rs.m_name)+1]; strcpy(m_name,rs.m_name); //把原来的内容搬过来 } }; int main(){ Student s("ZHANG Fei",30); s.show(); Student s2(s); //调用自定义拷贝实现深拷贝 s2.show(); return 0; }//main()结束了会销毁对象,销毁之前会调用析构函数,有了自定义拷贝,就不用担心double free了