程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++ 構造函數中使用new時注意事項

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

編輯:關於C++

C++ 構造函數中使用new時注意事項。本站提示廣大學習愛好者:(C++ 構造函數中使用new時注意事項)文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 構造函數中使用new時注意事項正文


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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved