个人理解
#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();
}