Доброго времени суток, колеги!
По ходу напсиания кода возник вопрос:
Изначально была функция в которой объявлялся QFileInfoList, заполнялся и с его элементами выполнялись некие действия:
void func(){
QFileInfoList lst;
....
//заполнение, чтение из него.
}
Затем заполнение QFileInfoList стало слишком громоздким и было выделено в отдельный метод.
QFileInfoList fillList(){
QFileInfoList lst;
....
//заполнение
return lst;
}
void func(){
QFileInfoList lst = fillList();
....
//работа со списком
}
При этом, насколько я понимаю, вызывается конструктор-копировщик и после вызова функции fillList() в стеке создается новый список в который заносятся копии элементов. То есть если список будет большой, то это займет много времени.
Видимо правильнее было бы создать список в динамической памяти и возвращать указатель на него. Но это вроде как старый сишный стиль и этого лучше избегать.
Сразу приходит в голову мысль об использовании ссылок, например, вот так:
QFileInfoList fillList(){
QFileInfoList & lst = *(new QFileInfoList());
....
//заполнение
return lst;
}
void func(){
QFileInfoList lst = fillList();
....
//работа со списком
}
Но тут у меня возникают вопросы:
1. Не говнокод ли это с кучей потенциальных проблем?
2. Что при этом происходит? То есть содается ли только один список файлов в динамической памяти, который затем везде используется или все равно происходит копирование элементов в стек на каком-то этапе?
P.S. Вопрос для общего развития. Просто хочется научиться писать правильный код.
Спасибо.