個人理解
#include <iostream>
struct MyString
{
MyString()
{
m_szStr = 0;
m_size = 0;
}
MyString(char* str)
{
m_size = strlen(str);
m_szStr = new char(m_size + 1);
memcpy(m_szStr, str, m_size);
m_szStr[m_size] = '\0';
}
MyString(const char* str)
{
m_size = strlen(str);
m_szStr = new char(m_size + 1);
memcpy(m_szStr, str, m_size);
m_szStr[m_size] = '\0';
}
MyString(MyString&& str)
{
m_szStr = str.m_szStr;
m_size = str.m_size;
str.m_szStr = 0;
str.m_size = 0;
}
// 通過右值引用,str引用了"Hello World.", 避免了不必要的拷貝,直接將內存中的值賦給了m_szStr, m_size。
MyString& operator=(MyString&& str)
{
m_szStr = str.m_szStr;
m_size = str.m_size;
str.m_szStr = 0;
str.m_size = 0;
return *this;
}
char* m_szStr;
size_t m_size;
};
int main()
{
MyString a;
// 此步分兩步,一步是調用構造函數生成一個臨時變量,再通過拷貝構造,將臨時變量直接交給a,避免了不必要的拷貝。
a = MyString("Hello World.");
getchar();
}