25-深拷贝和浅拷贝

简介: 25-深拷贝和浅拷贝
#include<bits/stdc++.h>
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.m_age;
    m_height = new int(*p.m_height);
  }
  //析构函数
  ~Person() {
    cout << "析构函数!" << endl;
    if (m_height != NULL)
    {
      delete m_height;
    }
  }
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()
{
  //25-深拷贝与浅拷贝
  test01();
  system("pause");
  return 0;
 } 
#include<bits/stdc++.h>
using namespace std;
class person{
  public:
    person(){
      cout<<"无参构造函数"<<endl;
    }
    person(int a,int h)
    {
      m_h=new int (h);
      age=a;
      cout<<"有参构造函数"<<endl; 
    }
    ~person(){
      //析构代码,将堆区开辟数据做释放操作 
      if(m_h!=NULL){
        delete m_h;
        m_h=NULL;
      } 
      cout<<"析构函数"<<endl;
    }
    int age; 
    int *m_h;
};
void test01(){
  person p1(18,160);
  cout<<"p1的年龄为: "<<p1.age<<"身高为:"<<*p1.m_h<<endl;
  person p2(p1);
  cout<<"p2的年龄为: "<<p1.age<<"身高为:"<<*p2.m_h<<endl;
}
int main()
{
  test01();
  return 0;
 }


相关文章
|
6月前
|
设计模式 存储 Java
深拷贝与浅拷贝,就是这么简单
深拷贝与浅拷贝,就是这么简单
|
12月前
|
存储 Cloud Native Linux
C++ 深拷贝浅拷贝
C++ 深拷贝浅拷贝
|
JSON Java API
深拷贝、浅拷贝
深拷贝、浅拷贝
78 0
|
JavaScript 前端开发 Python
故事会【深拷贝和浅拷贝】
故事会【深拷贝和浅拷贝】
|
24天前
|
JavaScript 前端开发 Java
什么是深拷贝,什么是浅拷贝
什么是深拷贝,什么是浅拷贝
41 0
|
4月前
|
编译器 C++
深拷贝和浅拷贝介绍
这篇文章讨论了C++中的数据拷贝,特别是浅拷贝和深拷贝的概念。对于基本类型和简单对象,拷贝是按位复制,即浅拷贝,类似于`memcpy()`函数的效果。当类包含动态分配的内存或其他资源时,需要显式定义拷贝构造函数以实现深拷贝,确保对象间的独立性。文中通过一个自定义的变长数组类`Array`示例说明了深拷贝的必要性,并展示了不使用深拷贝可能导致的问题。通常,如果类有指针成员,大部分情况需要深拷贝;否则,浅拷贝可能就足够了。文章还提到了在创建对象时需要预处理的情况,如记录对象创建时间或计数,这也需要深拷贝。
42 0
|
6月前
什么是深拷贝和浅拷贝哇
什么是深拷贝和浅拷贝哇
|
6月前
|
JavaScript 前端开发
浅拷贝和深拷贝
浅拷贝和深拷贝
44 2
|
12月前
|
C++
22 C++ - 深拷贝和浅拷贝
22 C++ - 深拷贝和浅拷贝
45 0
|
Java
浅拷贝与深拷贝
浅拷贝与深拷贝
84 0