国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2020-01-26 14:14:44
字體:
來源:轉載
供稿:網友

使用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;}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 游戏| 东莞市| 陕西省| 湟源县| 上林县| 玛纳斯县| 辉县市| 南投县| 丰原市| 原阳县| 永济市| 罗江县| 商城县| 禄丰县| 黎城县| 遂溪县| 大埔区| 丰城市| 南漳县| 阿瓦提县| 绥棱县| 静宁县| 改则县| 彩票| 安多县| 汉源县| 井冈山市| 正蓝旗| 息烽县| 鸡东县| 米林县| 柯坪县| 黑龙江省| 宜春市| 固始县| 达州市| 石渠县| 奎屯市| 石首市| 大渡口区| 石棉县|