C++之Big Three:拷貝構造、拷貝賦值、解構函式探究

小問SLAM筆記發表於2020-12-20

在這裡插入圖片描述
牽涉到本文知識點的前文:C++之操作符過載探究(五):賦值運算子過載和拷貝賦值函式(深拷貝)

Big Three:拷貝構造、拷貝賦值、解構函式。

例:

在這裡插入圖片描述

本例分析:打字手累,直接貼以前啥也不懂時研究本例知識點的筆記,有點囉嗦,自己看吧:

筆記第一頁:
在這裡插入圖片描述
筆記第二頁:
在這裡插入圖片描述
筆記第三頁:
在這裡插入圖片描述
筆記第四頁:
在這裡插入圖片描述
筆記第五頁:
在這裡插入圖片描述
筆記第六頁:
在這裡插入圖片描述
筆記第七頁:(啥也沒記)
在這裡插入圖片描述
筆記第八頁:(啥也沒記)
在這裡插入圖片描述
筆記第九頁:
在這裡插入圖片描述
筆記第十頁:(啥也沒記)
在這裡插入圖片描述
附本例程式碼:

//小問學程式設計
#include <cstring>
#include <iostream>
using namespace std;

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)
{
   m_data = new char[ strlen(str.m_data) + 1 ];
   strcpy(m_data, str.m_data);
}

ostream& operator<<(ostream& os, const String& str)
{
   os << str.get_c_str();
   return os;
}

int main()
{
  String s1("hello");
  String s2("world");

  String s3(s2);
  cout << s3 << endl;

  s3 = s1;
  cout << s3 << endl;
  cout << s2 << endl;
  cout << s1 << endl;
}

執行結果:

在這裡插入圖片描述

相關文章