C++深拷贝与浅拷贝的区别与实现

C++深拷贝与浅拷贝的区别与实现

在对象拷贝过程中,如果没有自定义拷贝构造函数,系统会提供一个缺省的拷贝构造函数,缺省的拷贝构造函数对于基本类型的成员变量,按字节复制,对于类类型成员变量,调用其相应类型的拷贝构造函数

背景:

如果不主动编写拷贝构造函数与赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数,如果类中含有指针参数,就会隐藏错误:以类String的两个对象来说,假设a.data的内容为 A , b.data的内容为 B 。

1.两个指针对象会指向同一区域的内存,会彼此影响。
2.将a.data赋值给b.data的时候,b.data原来的内存未被释放,造成内存泄漏。
3.对象在析构释放内存时,data会被释放两次。

!!!常将 拷贝构造对象语句写为:

String a(b);          //方便区分赋值语句

构造函数与拷贝构造函数的具体实现:

//构造函数
Array::Array(int count)
{
  m_iCount = count;
  m_pArr = new int[m_iCount];     //开辟内存空间
  for(int i=0;i

 

你可能感兴趣的:(c++,内存管理)