c 中string類的基本功能的實現(1)

2021-07-12 04:30:39 字數 2020 閱讀 8917

1、傳統的實現string類的方法

優點:程式簡單易懂

缺點:1)在實現其拷貝構造和賦值的操作時多次的呼叫new動態的開闢空間,因此也需要多次的通過delete來釋放空間。如果處理不當還容易造成記憶體洩漏。

2)程式的一致性比較差

#include #include using namespace std;

class string 

} //拷貝構造

string(const string& str)

:_str(new char[strlen(str._str) + 1]) }

//賦值

string& operator = (const string& str)

return *this;

} //析構函式

~string()

private:

char * _str;

};

2、現代的實現string類的方法寫實

拷貝構造實現思路:

a)建立乙個臨時物件,並通過cconst string._str來構造。

b)構造完成之後將臨時物件的_str和this._str進行交換進而使得物件的內容交換來完成拷貝構造

賦值實現思路:

通過引數的值傳遞來構造物件,並將物件的內容交換

優點:1)程式的一致性比較好

2)只是在建構函式中出現了開闢空間的new,只在析構函式中出現了delete結構清晰,不容易造成記憶體洩漏

class string 	}	

//拷貝構造

string(const string& str)

:_str(null)//防止其指向乙份不合法的空間

//賦值

string& operator =(string str)

//析構函式

~string()

private:

char * _str;

};

3、寫實函式提高string類的效率

在以上的兩種string類的實現方法中,都存在乙個效率的問題。有的時候字串比較長,而且物件建立之後也不一定更改。但是以上兩種方法無論何時都需要構建,其效率比較低而且會帶來記憶體的浪費。

我們可以通過讓所有指向相同字串內容的物件指向同乙份空間,通過計數器來記錄物件的個數,避免析構出現錯誤。

所以可以通過在開闢物件的時候多開闢4個位元組的空間,來存放計數器。如果修改的時候再開闢空間。

#define _crt_secure_no_warnings

#include#include using namespace std;

class string 

//拷貝建構函式

//如果不更改物件的內容則讓多個物件的字元指標指向同乙份空間

string(const string& s)

//賦值語句

//如果不更改物件的內容則讓多個物件的字元指標指向同乙份空間

string& operator =(const string& s)

//只有乙個物件使用的乙份空間則釋放

else

}return *this;

} //析構函式

~string() }

public:

//找到開闢空間時的存放字串的首位址

char * findstartref(char* str)

//找到釋放空間時的首位址

char * finddel(char* del)

//找到計數器的首位址

int *count(char* str)

public:

//修改寫實物件的內容函式

char & operator(int index)

//如果該物件和其他物件公用乙份空間

else

return _pstr[index];

}private:

char * _pstr;

};

c 佇列基本功能

include include include typedef int status define ok 1 define error 0 template class order tream int n status full 判斷是否為滿 status empty 判斷是否為空 void put...

ajax的基本功能

2 xmlhttprequest物件用於在後台與伺服器交換資料。3 所有現代瀏覽器 ie7 firefox chrome 均內建xmlhttprequest物件。支援ie5 ie6 if window.activexobject else 4 使用get方式提交,引數拼接在請求的url後面,請sen...

Nginx的基本功能

nginx的一些基本功能 1 靜態http伺服器 首先,nginx是乙個http伺服器,可以將伺服器上的靜態檔案 如,html 通過http協議展現給客戶端 2 反向 伺服器 什麼是反向 客戶端本來就可以直接通過http協議訪問某 應用伺服器,管理員可以在中間加上乙個nginx,客戶端請求nginx...