Autodestrukcja klasy

0

Witam,

Mam utworzoną klasę na bazie QThread.
Funkcja run wygląda następująco:

void IntR::run(){

/* operacje do wykonania(trwają ok 2-10s) */
// delete this ?
}

Wywołuję tak:

int i;
for(i=0; i<10; i++){
  new IntR(); // tworzę 10 wątków które wykonują pewne operacje
}

Czy klasa po zakończeniu wykonywania funkcji run usunie się z pamięci? Jeśli nie to jak to zrobić?

0

nie musisz zwalniać pamięci jeśli klasa jest dzieckiem jakiejś innej wtedy jej usuwaniem i zwalnianiem pamięci zajmuje się rodzic podczas jego usuwania.

0

tutaj masz o tym napisane.

0

To co chcesz zrobić spowoduje w najlepszym wypadku crusha, w najgorszym program wykona jakieś niezdefiniowane zachowanie. Moim zdaniem po prostu wątek się zawiesi.
Najprostszym prawidłowym rozwiązaniem jest wywołanie deleteLater(), wtedy usunięcie obiektu powinno nastąpić z wątku, który jest właścicielem tego obiektu (watku).

EDIT: Poczytaj o Qt Concurrent to jest bezpieczniejsze i sprytniejsze rozwiązanie (liczba wątków będzie automatycznie dobierana w zależności od dostępnych rdzeni).

0

Najlepiej zapisz jako new IntR(parent)

1 użytkowników online, w tym zalogowanych: 0, gości: 1