- 假設String類有如下私有成員
class String
{
private:
char* str; //points to string allocated by new
int len; //holds length of string
//...
};
a.下述預設建構函式有什麼問題?
String::String(){}
沒有為str和len指定預設值,比較將str設定為nullptr。
b.下述建構函式有什麼問題?
String::String(const char* s)
{
str = s;
len = strlen(s)
}
str指向s,可能存在二次釋放的問題;len 應該為strlen(s) + 1.
c.下述構造有無問題
String::String(const char* s)
{
strcpy(str, s);
len = strlen(s);
}
沒有為str分配記憶體,應使用new char[strlen(s) + 1]來分配。
2.如果定義了一個類,其指標成員使用new進行初始化,請指出可能出現的3個問題以及如何避免。
- 解構函式裡沒有將指標成員釋放
- 複製和賦值時,直接使用淺複製,導致記憶體二次釋放
- 建構函式和解構函式中new和delete不對應。