面試 手寫String類

2021-09-22 01:33:22 字數 1102 閱讀 3956

#include#includeclass cmystring

;cmystring::cmystring(char *pdata)

else

}//當cmystring cmtest2(cmtest1);時或cmystring cmtest2 = cmtest1;時呼叫

cmystring::cmystring(const cmystring &str)

cmystring::~cmystring()

//當cmtest2 = cmtest1;時呼叫

cmystring& cmystring::operator = (const cmystring& str)

1、返回值型別宣告為該型別引用,並在函式結束前返回*this的目的是為了可以連續賦值。注意:this指的是物件的指標,也就是說*this表示該物件,如果想訪問成員變數,可以用this->a或(*this).a,因為返回的型別是物件的引用,也就是物件,所以應該返回*this而不是this。

2、引數部分是常量引用,常量是因為在該函式中不會改變傳入例項的狀態,引用是為了少呼叫一次拷貝建構函式。

3、要在new前先釋放自身的記憶體並指向nullptr,可能出現記憶體洩露。

4、一定要判斷傳入的引數和當前的例項(*this)是不是同乙個例項,如果是就直接返回就好了,因為如果是乙個例項delete了記憶體,就會造成把本來要賦值的記憶體也給delete了,有很大問題。

5、特殊情況:當new char因為記憶體不足導致丟擲異常時,例項中的m_pdata其實已經被刪除了,無法復原,所以首先可以先new,只在成功後才delete原來記憶體並複製,這樣即使new失敗了也不會破壞原來的內容,還可以考慮用乙個臨時物件,在拷貝建構函式中new。**示例如下:

cmystring& cmystring::operator = (const cmystring& str)

return *this;

}

這樣,當if結束時,因為臨時變數的緣故會自動呼叫析構函式,釋放strtemp的記憶體,而因為strtemp.m_pdata指向的記憶體就是例項之前m_pdata的記憶體,其實也就是釋放了原來的記憶體。

面試手寫方法

陣列 map array.prototype.map function fn filter array.prototype.filter function fn 扁平化 function arr return arr 純數字時使用,若其中有其他型別,則需另外判斷或另行他法 當然,最簡單的是 arr....

面試 手寫函式合集

函式作用 把src的字串放到dst的位置。char strcpy char dst,const char src 該函式是沒有考慮重疊的 char strcpy char dst,const char src else return res 函式作用 把src的字串的前size個字元放到dst的位置...

前端面試(手寫)

手寫篇 手寫 instenceof 原生的 instanceof console.log instanceof array true console.log instanceof array false 手寫 myinstanceof function myinstanceof left,right...