91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++ 構造函數中使用new時注意事項

發布時間:2020-08-27 17:49:38 來源:腳本之家 閱讀:198 作者:xdzhanght 欄目:編程語言

使用new初始化對象中的指針成員時遇到的問題

在構造函數中使用new初始化指針成員,那么析構函數中就必須使delete,并且new對應delete, new[]則對應于delete[]。

在有多個構造函數的情況下,必須以相同的方式使用new,要不用new,要不用new[],因為只存在一個析構函數,所有的構造函數都必須與虛構函數相兼容。

PS. 當然在構造函數中使用new初始化指針的時候,可以把指針初始化為空(0/NULL 或者是C++11中的nullptr),因為delete不管有沒帶[]都與空指針兼容。

需要自行定義一個復制構造函數和賦值構造函數,用深復制的方式把一個對象初始化給另一個對象,一個對象復制給另一個對象,如下:

復制構造函數:

  • 分配足夠空間存儲復制的數據
  • 復制數據,不僅僅地址
  • 更新受到影響的靜態類成員
String:String(const String & st)
{
  num_Strings++;
  len = st.len;
  str = new char[len+1];
  std::strcpy(str,st.str);
}

賦值構造函數:

  • 檢查自我復制情況
  • 釋放成員指針之前指向內存
  • 復制數據不僅僅地址
  • 返回一個指向調用對象的引用
String & String:operator=(const String & st)
{
  if(this == &st)
    return *this;
  else
    delete [] str;
    len = st.len;
    str = new char[len+1];
    std::strcpy(str,st.str);
  return *this;
}

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会同县| 庆城县| 讷河市| 鄄城县| 鸡西市| 庆安县| 子洲县| 监利县| 集安市| 泾源县| 茂名市| 渭南市| 平阴县| 泸西县| 元氏县| 全州县| 石渠县| 静宁县| 教育| 长丰县| 应城市| 刚察县| 左贡县| 都匀市| 扎囊县| 聂荣县| 新兴县| 临泉县| 专栏| 锡林郭勒盟| 樟树市| 旌德县| 积石山| 迭部县| 德化县| 西青区| 海口市| 探索| 察哈| 恩施市| 绿春县|