簡體   English   中英

檢索數組的最干凈方法是什么?

[英]What is the cleanest way of retrieving an array?

我需要一個函數,該函數返回任意長度的數據塊(char *)。 函數的調用者需要數組和數組的大小。 該數組可以在函數內部動態分配,也可以作為參數傳遞。 有多種方法可以達到相同的結果。 現在,我想知道在C ++中被認為是“最干凈”的方法。 我將在下面給出示例。

返回數組,修改長度(作為參考):

char *getData( int &length ) {
  length = // set length
  char *data = new char[ length ];
  // fill data here
  return data;
}

返回長度,修改數組(作為參考):

int getData( char * &data ) {
  int length = // set length
  data = new char[ length ];
  // fill data here
  return length;
}

返回成功代碼,修改數組和長度(作為參考)

bool getData( int &length, char * &data ) {
  int length = // set length
  data = new char[ length ];
  // fill data here
  return true; // Successful
}

填充提供的數組,返回完整長度(可能無法獲取所有數據):

int getData( char *data, int maxLength ) {
  int length = // set length
  // fill data here, to max size of min( length, maxLength )
  return length;
}

這樣做的可能性甚至更多,但是在C ++中被認為是“最干凈”的方法是什么?

沒有一個。 如果您使用的是C ++,而不僅僅是C,請繼續使用C ++提供的語義。

您確實要使用std::vector ,特別是std::vector<char> 不要自己動手或處理C風格的東西,這是浪費時間。

您有幾種選擇。 正如評論員提到的,最C ++的方式是使用標准容器。 那就是他們的目的。 這樣,您還可以避免由於手動new數據而導致的潛在內存泄漏。

std::vector<char> getData() {
  std::vector<char> res;
  // fill vector with data of your choosing using push_back etc.
  return res;
}

如果必須使用c樣式數組,另一種選擇是使用在GSL(指南支持庫)下作為CppCoreGuidelines項目的一部分發布的新array_view類。

參見: https : //github.com/Microsoft/GSL

並且: https : //github.com/isocpp/CppCoreGuidelines

但是,我建議您堅持使用std::vector除非您有充分的理由(例如龐大的舊代碼庫或與關鍵且不可更新的庫進行互操作)以使用c樣式數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM