类和对象—对象特性—深拷贝与浅拷贝
生活随笔
收集整理的這篇文章主要介紹了
类和对象—对象特性—深拷贝与浅拷贝
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
淺拷貝:簡單的賦值拷貝操作
深拷貝:在堆區重新申請空間,進行拷貝操作
淺拷貝的問題:
淺拷貝的問題要用深拷貝來解決:
新的代碼:
#include <iostream> using namespace std;class Person{ public://構造函數 Person(){cout << "Person 無參構造函數的調用!" << endl; }Person(int age,int height){m_Height = new int(height);m_Age = age;cout << "Person 有參構造函數的調用!" << endl; }//自己實現拷貝構造函數,解決淺拷貝帶來的問題 Person(const Person &p){cout << "Person 拷貝構造函數的調用" << endl;m_Age = p.m_Age ;// m_Height = p.m_Height;編譯器做的操作//深拷貝操作m_Height = new int(*p.m_Height);}//析構函數 將堆區開辟的數據做釋放操作 ~Person(){if(m_Height == NULL){delete m_Height;m_Height = NULL;} cout << "Person 析造函數的調用!" << endl; } int m_Age; //年齡 int *m_Height; //身高 };void test01(){Person p1(10,160);cout << "p1的年齡為 " << p1.m_Age << endl;cout << "p1的身高為 " << *p1.m_Height << endl;Person p2(p1); //編譯器做了一個淺拷貝的操作 cout << "p2的年齡為 " << p2.m_Age << endl; cout << "p2的身高為 " << *p2.m_Height << endl; }int main(){test01(); system("pause");return 0; }注意:如果屬性有在堆區開辟的,一定要自己提供拷貝構造函數。防止淺拷貝帶來的問題。
總結
以上是生活随笔為你收集整理的类和对象—对象特性—深拷贝与浅拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类和对象—对象特性—构造函数调用规则
- 下一篇: 类和对象—对象特性—静态成员函数