C++深拷贝和浅拷贝
浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区重新申请空间,进行拷贝操作
小结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,如果不利用深拷贝在堆区创建新内存,会导致浅拷贝带来的重复释放堆区的问题
#include<iostream> using namespace std; class WLM { public: WLM() { cout << "默认构造函数的调用!" << endl; } WLM(int age,int height) { m_age = age; m_height = new int(height); cout << "有参构造函数的调用!" << endl; } WLM(const WLM &wlm) { m_age = wlm.m_age; m_height = new int(*wlm.m_height); cout << "拷贝构造函数的调用!" << endl; } ~WLM() { if(m_height != NULL) { delete m_height; m_height = NULL; } cout << "析构函数的调用!" << endl; } public: int m_age; int *m_height; }; void test1() { WLM zjy1(22,160); cout << "zjy1的年龄" << zjy1.m_age << endl; cout << "zjy1的身高" << *zjy1.m_height << endl; WLM zjy2(zjy1); cout << "zjy2的年龄" << zjy2.m_age << endl; cout << "zjy2的年龄" << *zjy2.m_height << endl; } int _tmain(int argc, _TCHAR* argv[]) { test1(); system("pause"); return 0; }