From f27b1d373ad33027f337bf96f2b8b8c3ac05917d Mon Sep 17 00:00:00 2001
From: waitti <waitti@foxmail.com>
Date: Sat, 19 Jun 2021 18:53:19 +0800
Subject: [PATCH] fix: add delete but no use

---
 src/lib/stl/list.h     |  4 +++-
 src/lib/stl/string.cpp | 26 ++++++++++++++++++++++++++
 src/lib/stl/string.h   |  6 ++++++
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/src/lib/stl/list.h b/src/lib/stl/list.h
index 61e18b3..d589849 100644
--- a/src/lib/stl/list.h
+++ b/src/lib/stl/list.h
@@ -118,7 +118,9 @@ struct List{
 
     List<T>& operator=(const List<T>& list){
         // TODO:free
-        // pass
+        while (start!= nullptr){
+            pop_front();
+        }
 
         // copy
         start=end=nullptr;
diff --git a/src/lib/stl/string.cpp b/src/lib/stl/string.cpp
index 6e13246..eb4becb 100644
--- a/src/lib/stl/string.cpp
+++ b/src/lib/stl/string.cpp
@@ -7,6 +7,17 @@ String::String(const char* str){
     memcpy(data,str,_length+1);
 }
 
+String& String::operator=(const String& str){
+    delete[] data;
+
+    _length= str._length;
+    _capacity=_length+1;
+    data=new char[_capacity];
+    memcpy(data,str.data,_length+1);
+
+    return *this;
+}
+
 String& String::operator=(const char* str){
     delete[] data;
 
@@ -35,6 +46,17 @@ String::String(const String& b){
     memcpy(data,b.data,_capacity);
 }
 
+String::String(String&& b){
+    _capacity=b._capacity;
+    _length=b._length;
+    data=b.data;
+    // init b to empty
+    b._capacity=__INIT_CAPACITY;
+    b._length=0;
+    b.data=new char [b._capacity];
+    memset(b.data,0,__INIT_CAPACITY);
+}
+
 char* String::c_str()const{
     return data;
 }
@@ -142,4 +164,8 @@ ostream& operator <<(ostream& os,unsigned long long n){
     return os;
 }
 
+String::~String() {
+    delete data;
+}
+
 ostream cout;
diff --git a/src/lib/stl/string.h b/src/lib/stl/string.h
index 6690e6c..13e4c16 100644
--- a/src/lib/stl/string.h
+++ b/src/lib/stl/string.h
@@ -12,14 +12,20 @@ public:
 
     String(const char* str);
 
+    String& operator=(const String& str);
+
     String& operator=(const char* str);
 
     String();
 
+    ~String();
+
     String(int length);
 
     String(const String& b);
 
+    String(String&& b);
+
     char* c_str()const;
 
     int length()const;
-- 
GitLab