22 C++ - 深拷贝和浅拷贝

简介: 22 C++ - 深拷贝和浅拷贝

1.浅拷贝

同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然是独立的两个对象,这种情况被称为浅拷贝。

一般情况下,浅拷贝没有任何副作用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动态内存释放的处理,会导致内存问题。

2. 深拷贝

当类中有指针,并且此指针有动态分配空间,析构函数做了释放处理,往往需要自定义拷贝构造函数,自行给指针动态分配空间,深拷贝。

class Person{
public:
  Person(char* name,int age){
    pName = (char*)malloc(strlen(name) + 1);
    strcpy(pName,name);
    mAge = age;
  }
  //增加拷贝构造函数
  Person(const Person& person){
    pName = (char*)malloc(strlen(person.pName) + 1);
    strcpy(pName, person.pName);
    mAge = person.mAge;
  }
  ~Person(){
    if (pName != NULL){
      free(pName);
    }
  }
private:
  char* pName;
  int mAge;
};
void test(){
  Person p1("Edward",30);
  //用对象p1初始化对象p2,调用c++提供的默认拷贝构造函数
  Person p2 = p1;
}


目录
相关文章
|
1月前
|
编译器 C++ Python
【C/C++ 泡沫精选面试题02】深拷贝和浅拷贝之间的区别?
【C/C++ 泡沫精选面试题02】深拷贝和浅拷贝之间的区别?
56 1
|
7月前
|
存储 Cloud Native Linux
C++ 深拷贝浅拷贝
C++ 深拷贝浅拷贝
|
18天前
|
存储 编译器 C++
C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)
C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)
17 0
|
8月前
|
编译器 C++
C++:基于浅拷贝/深拷贝对模拟string类的一些优化
C++:基于浅拷贝/深拷贝对模拟string类的一些优化
|
9月前
|
编译器 C++
C++中的深拷贝和浅拷贝介绍
对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: class Base{ public: Base(): m_a(0), m_b(0){ } Base(int a, int b): m_a(a), m_b(b){ } private: int m_a; int m_b; }; int main(){ int a = 10; int b = a; //拷贝 Base obj1(10, 20);
96 0
|
11月前
|
C++
C++学习笔记_06 深拷贝和浅拷贝 2021-04-19
C++学习笔记_06 深拷贝和浅拷贝 2021-04-19
|
3天前
|
C++
C++一分钟之-类与对象初步
【6月更文挑战第20天】C++的类是对象的蓝图,封装数据和操作。对象是类的实例。关注访问权限、构造析构函数的使用,以及内存管理(深拷贝VS浅拷贝)。示例展示了如何创建和使用`Point`类对象。通过实践和理解原理,掌握面向对象编程基础。
30 2
C++一分钟之-类与对象初步
|
4天前
|
存储 编译器 C++
|
4天前
|
C++
C++类和类模板——入门
C++类和类模板——入门
10 1
|
6天前
|
数据安全/隐私保护 C++
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。