zoukankan      html  css  js  c++  java
  • C++(深拷贝与浅拷贝)

    深拷贝与浅拷贝

    • 浅拷贝:简单的赋值拷贝操作
    • 深拷贝:在堆区重新申请空间,进行拷贝操作

    示例:

    #include <iostream>
    using namespace std;
    
    class Person{
    public:
          //无参构造函数
          Person(){
                cout<<"无参构造函数!"<<endl;
          }
          
          //有参构造函数
          Person(int age, int height)
          {
                cout<<"有参构造函数!"<<endl;
                m_age=age;
                m_height=new int(height);
          }
    
          //拷贝构造函数
          Person(const Person &p)
          {
                cout<<"拷贝构造函数!"<<endl;
                //如果不利用深拷贝在堆区常见新内存,会导致浅拷贝带来的重复释放堆区问题
                m_age=p.age;
                m_height=new int(*p.m_height);
          }
    
          //析构函数
          ~Person()
          {
                cout<<"析构函数!"<<endl;
                if(m_height!=NULL)
                {
                      delete m_height;
                      m_height=NULL;
                }
          }
    public:
          int m_age;
          int *m_height;
    };
    
    void test01()
    {
    	Person p1(18, 180);
    
    	Person p2(p1);
    
    	cout << "p1的年龄: " << p1.m_age << " 身高: " << *p1.m_height << endl;
    
    	cout << "p2的年龄: " << p2.m_age << " 身高: " << *p2.m_height << endl;
    }
    
    int main() {
    
    	test01();
    
    	system("pause");
    
    	return 0;
    }
    
    
  • 相关阅读:
    洛谷 P1604 B进制星球
    629D
    。。。。。
    新安排
    计算几何的两道题
    cf C题
    昨天
    最近几天的安排
    最近几天
    杂论——持续更新。
  • 原文地址:https://www.cnblogs.com/xuelanga000/p/13620277.html
Copyright © 2011-2022 走看看