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;
}
posted @ 2022-07-26 09:38  萌萌的保镖  阅读(75)  评论(0)    收藏  举报