//
#include"stdafx.h"
#include<iostream>
using namespace std;
class String{
public:
String(){
m_data = new char[1];
m_data = '\0';
}
String(const char* other){
cout << "常量初始化string" << endl;
m_data = new char[strlen(other) + 1];
strcpy(m_data, other);
}
String(const String& other){
cout << "拷贝构造函数" << endl;
m_data = new char[strlen(other.m_data) + 1];
strcpy(this->m_data, other.m_data);
}
String& operator=(const String& other){
cout << "赋值!!!一个传给另一个" << endl;
if (this==&other){
return *this; //如果是自赋值
}
delete[] m_data; //不是自赋值,删除原本的指针,防止内存泄漏
m_data = new char[strlen(other.m_data) + 1];
//strcpy(m_data, other.m_data);
memcpy(m_data, other.m_data, strlen(other.m_data)+1); //这样赋值也可以,注意要用strlen
return *this;
}
~String(){
cout << "析构函数" << endl;
delete[] m_data;
}
void print(){
char* tmp = m_data;
printf("%s\n", m_data); //用printf就可以了
}
String(String&& other){
cout << "移动构造函数~" << endl;
m_data = other.m_data;
other.m_data = nullptr;
}
private:
char* m_data;
};
int main(){
String str1 = "1234565";
str1.print();
String str2(move(str1));
str2.print();
String str3 = str2;
str3.print();
String str4("1asdfgfg"); //此种写法和str1等价
str4.print();
String str5;
str5 = str4;
str5.print();
}
有错误的话请留言指正