Cześć, uczę się frameworka Qt do języka C++ i mam mały problem z odpowiedzią na pytanie zawarte w książce, z której się uczę a mianowicie "C++ i Qt Wprowadzenie do wzorców projektowych". Poniższy listing pochodzi pochodzi też z tej książki i nie jestem jego autorem.
Oto fragment listingu:
// wyhoduj gromadkę
void growBunch() {
qDebug() << "Stwórzmy najpierw gromadkę obiektów." << endl;
QObject bunch;
bunch.setObjectName("Obiekt na stosie");
/* inne obiekty są tworzone na stercie */
Person* mike = new Person("Mike", &bunch);
Person* carol = new Person("Carol", &bunch);
new Person("Greg", mike);
new Person("Peter", mike);
new Person("Robert", mike);
new Person("Marcia", carol);
new Person("Jan", carol);
new Person("Cindy", carol);
new Person("Alice"); /* Alice nie ma rodzica — wyciek pamięci? <-- to pytanie */
qDebug() << "\nWyświetl listę za pomocą QObject::dumpObjectTree()"
<< endl;
bunch.dumpObjectTree(); /* Wynik dumbObjectTree() pojawi się na ekranie, tylko jeśli biblioteka Qt została skompilowana z włączona opcją debug. */
cout << "\nMożemy zwrócić wartości z growBunch() -"
<< " Zniszczenie wszystkich obiektów na stosie." << endl;
}
O ile rozumiem to, że QObject opiekuje się swoimi dziećmi oraz mike i carol są dziećmi rodzica bunch, który jest zmienną umieszczoną na stosie i zostanie wywołany jego destruktor zaraz po wyjściu z funkcji i usunie on wszystkie swoje dzieci i dzieci dzieci ze sterty, to co do Person("Alice") wydaje mi się że wyciek pamięci będzie, no bo skoro nie ma ona żadnego rodzica, a funkcja nie korzysta z delete dla Alicji, to nie ma kto jej usunąć. Autor niestety na to pytanie nie odpowiada, a chciałbym się upewnić, że dobrze rozumiem to, co się tutaj dzieje. A góry przepraszam, jeśli pytanie jest głupie, ale budzi to moje wątpliwości. Z góry dziękuję za pomoc :)