Verständnisfrage zum automatischen Reference Counting von Qt
Verfasst: 14. November 2006 21:36
Hi,
soweit ich weiß, bieten alle QObject-Ableitungen ja die Möglichkeit des automatischen reference countings.
D.h. wenn ich ein QObject lösche, werden vorher dessen Kinder alle gelöscht.
Ich vermute mal, das "Hochzählen" geht über den "=" Operator...
Jetzt ist mir dazu folgendes passiert:
Ich habe Klasse A, die von B und C benutzt wird (in verschiedenen Threads, alle drei sind also auch QObjects).
Im Konstruktor von B und C übergebe ich ein A Objekt als "parent".
Wenn jetzt MyApp::~MyApp(){}
ausgeführt wird, sollten a, b, c doch sauber gelöscht werden, oder?
Weil ich in B und C auch const-Routinen von A benutzen will, habe ich
mir den Zeiger kopiert:
Ist sowas überhaupt erlaubt, oder muß ich z.B.
nutzen um an den Parent zu kommen?
Ich habe nämlich sonst das Problem, daß in Klasse B irgendwann nach dem Aufruf von A::~A() m_A ungültig wird und ich eine Methode damit aufrufe. Zu diesem Zeitpunkt darf b ja schon nicht mehr existieren!
Ich habe das Gefühl, daß Qt einem da sicher gute Hilfmittel mitgibt, ich sie aber nur noch nicht gefunden habe
vielen Dank für eure Hilfe!
caetydid >8^)
soweit ich weiß, bieten alle QObject-Ableitungen ja die Möglichkeit des automatischen reference countings.
D.h. wenn ich ein QObject lösche, werden vorher dessen Kinder alle gelöscht.
Ich vermute mal, das "Hochzählen" geht über den "=" Operator...
Jetzt ist mir dazu folgendes passiert:
Ich habe Klasse A, die von B und C benutzt wird (in verschiedenen Threads, alle drei sind also auch QObjects).
Im Konstruktor von B und C übergebe ich ein A Objekt als "parent".
Code: Alles auswählen
MyApp::MyApp(...) : QApplication(...)
{
A a( this );
B b( &a );
C c( &a );
}ausgeführt wird, sollten a, b, c doch sauber gelöscht werden, oder?
Weil ich in B und C auch const-Routinen von A benutzen will, habe ich
mir den Zeiger kopiert:
Code: Alles auswählen
B::B( A* parent ) : QThread( parent )
{
m_A = (const A* )parent;
...
}Code: Alles auswählen
dynamic_cast<A*>(this->parent()) Ich habe nämlich sonst das Problem, daß in Klasse B irgendwann nach dem Aufruf von A::~A() m_A ungültig wird und ich eine Methode damit aufrufe. Zu diesem Zeitpunkt darf b ja schon nicht mehr existieren!
Ich habe das Gefühl, daß Qt einem da sicher gute Hilfmittel mitgibt, ich sie aber nur noch nicht gefunden habe
vielen Dank für eure Hilfe!
caetydid >8^)