浅拷贝:即类中有指针成员变量,拷贝时,只拷贝了指针变量,而没有拷贝指针变量所指向的地址块。
实例代码:
1 #include2 using namespace std; 3 4 class Tree{ 5 public: 6 // 拷贝构造函数 7 Tree(const Tree& tree){ 8 this->num = tree.num; 9 }10 // 构造函数11 Tree(){12 num = new int(10);13 }14 // 析构函数15 ~Tree(){16 delete num;17 }18 // 普通打印成员变量内容函数19 void printNum(){20 cout<<*(this->num)< printNum();30 31 // 拷贝构造函数起作用了32 Tree tree2(*tree1);33 tree2.printNum();34 35 // 销毁tree1对象36 delete tree1;37 // 此时,num是悬空指针了38 tree2.printNum();39 40 system("pause");41 return 0;42 }
深拷贝:即复制对象时如有指针变量,那么也复制指针变量所指向的内存块。
实例代码:
1 #include2 using namespace std; 3 4 class Tree{ 5 public: 6 // 拷贝构造函数(深拷贝) 7 Tree(const Tree& tree){ 8 this->num = new int(); 9 *(this->num) = *(tree.num);10 }11 // 构造函数12 Tree(){13 num = new int(10);14 }15 // 析构函数16 ~Tree(){17 delete num;18 }19 // 普通打印成员变量内容函数20 void printNum(){21 cout<<*(this->num)< printNum();31 32 // 拷贝构造函数起作用了33 Tree tree2(*tree1);34 tree2.printNum();35 36 // 销毁tree1对象37 delete tree1;38 // 此时,num是悬空指针了39 tree2.printNum();40 41 system("pause");42 return 0;43 }