C++ Primer plus 第12章類和動態記憶體分配複習題參考答案

weixin_33763244發表於2018-09-02
  1. 假設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不對應。

相關文章