Мне нужна функция, которая возвращает кусок данных (char *) с произвольной длиной. Вызывающему функции требуется как массив, так и размер массива. Этот массив может динамически выделяться внутри функции или передаваться в качестве аргумента. Существует несколько способов достижения одного и того же результата. Теперь мне было интересно, что считается «самым чистым» способом сделать это на C++. Я приведу примеры ниже.Каков самый чистый способ извлечения массива?
Возврат массива, изменить длину (в качестве ссылки):
char *getData(int &length) {
length = // set length
char *data = new char[ length ];
// fill data here
return data;
}
длина Return, изменить массив (в качестве ссылки):
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++?
Самый чистый путь - это, вероятно, использование 'std :: vector' вместо массива c-style. – wimh
Самый чистый способ - использовать 'std :: vector' и вернуть его по значению. –