У меня есть следующее:
void Class1::method()
{
QStringList* file_list;
collect_file_paths(file_list); //Sends pointer to the method below
}
void Class1::collect_file_paths(QStringList* file_list)
{
//Gather file paths
DirectorySearch ds;
connect(&ds, SIGNAL(updateStatus(QString)), this, SLOT(onStatusUpdate(QString)));
file_list = ds.get_file_names(_strPath); //Returns a pointer of QStringList
}
QStringList* DirectorySearch::get_file_names(QString path)
{
QStringList *file_names = new QStringList;
traverse(path, file_names);
compare_existing(file_names);
return file_names; //returning pointer address
}
Что происходит, так это то, что адрес памяти, возвращенный из get_file_names ()
, теряется / удаляется, когда я ухожу область видимости Class1 :: collect_file_paths ()
. Я так понимаю, что QStringList * file_names = new QStringList;
в классе DirectorySearch сейчас в куче памяти. Поэтому его следует оставить в куче, пока я не вызову delete
, т.е. он никогда не выходит за рамки. Однако, как упоминалось выше, адрес / значения QStingList
теряются, когда я возвращаюсь к Class1 :: method ()
из collect_file_paths (file_list)
.
Кто-нибудь может объяснить, что происходит?
Спасибо.