QSerialPort sender feil i destructor.

QSerialPort sender feil i destructor.

Beskrivelse.

QSerialPort () hjelper Kall QSerialPort :: Lukk () for a sikre at seriell port ikke lenger er i bruk. Lukk () gir igjen en feil & # 91; 1 & # 93; hvis det kalles nar det allerede er stengt. Dette resulterer i en feil hver gang en QSerialPort blir odelagt som aldri har v rt apen () eller har allerede v rt n r () ‘d manuelt.

Dette ville ikke v re mye av et problem da objektet er odelagt uansett, men det gir et signal i prosessen. Dette signalet kan v re ubeleilig nar det sendes ut under et destructor-anrop: Hvis en klasse Foo har en QSerialPort-forekomst som medlem og har et spor forbundet med QSerialPort :: SerialPortError-signalet, kalles sporet etter Foo’s destructor. Dette kan forarsake noen kaos da Foo allerede er odelagt.

Se vedlagt kode for et eksempel.

Jeg foreslar en enkel losning for losningen: Ikke ring n r () i destructoren hvis porten allerede er stengt.

1. et objekt Foo avledet fra QObject og har en forekomst av QSerialPort er odelagt.

Foo () kalles, Foo blir odelagt.

QSerialPort () kalles og ringer QSerialPort :: close ()

4. QSerialPort :: close () gir et feilsignal fordi det allerede er stengt.

5. Problemet: Dette signalet kan na kalle Foo :: someslot () Selv toft Foo ble allerede odelagt i trinn 2.

6. Alle medlemmer av Foo er odelagt, na er det forfedre odelagt: QObject ::

QObject () kalles og kobler fra alle signaler og spor.

Normalt vil et signal aldri kalle et spor av et odelagt objekt som QObject ::

QObject () vil koble fra et odelagt objekt, men destruktoren til en overordnet klasse kalles etter destruktoren til medlemmene av klassen.