C++ 学习笔记 浅拷贝/深拷贝

class String
{
public:                                 
   String(const char* cstr=0);                     
   String(const String& str);                  // 拷贝构造函数(为什么叫拷贝,因为传递的参数是相同类型)  
   String& operator=(const String& str);       // 拷贝赋值函数  
   ~String();                                    
   char* get_c_str() const { return m_data; }
private:
   char* m_data;
};

#include <cstring>

inline
String::String(const char* cstr)
{
   if (cstr) {
      m_data = new char[strlen(cstr)+1];
      strcpy(m_data, cstr);
   }
   else {   
      m_data = new char[1];
      *m_data = '\0';
   }
}

inline
String::~String()
{
   delete[] m_data;
}

// 深拷贝赋值函数 inline String
& String::operator=(const String& str) { if (this == &str) return *this; delete[] m_data; m_data = new char[ strlen(str.m_data) + 1 ]; strcpy(m_data, str.m_data); return *this; }
// 深拷贝构造函数 inline String::String(
const String& str) { this->m_data = new char[ strlen(str.m_data) + 1 ]; strcpy(this->m_data, str.m_data); }

浅拷贝:编译器自带的是浅拷贝构造函数。只是将b的地址拷贝给a,此时a和b指向同一块地址,a之前指向的空间形成内存泄漏,而且a b同时指向一个地址也很危险

深拷贝:深拷贝构造函数或深拷贝赋值函数需要我们自己写。

posted @ 2022-06-20 11:08  UE4_UE5_Academic  阅读(174)  评论(0)    收藏  举报