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...