[英]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.