The Dark Side of Hardware Upgrade Forum

...bringing out the worst in you since 2003...
Oggi è lun ott 05, 2026 3:23 pm

Tutti gli orari sono UTC +1 ora


-->
-->

Apri un nuovo argomento Rispondi all’argomento  [ 52 messaggi ]  Vai alla pagina 1, 2, 3  Prossimo
Autore Messaggio
 Oggetto del messaggio: [Qt/C++] Gestione Memoria
MessaggioInviato: mer lug 20, 2011 4:22 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
leggo in giro che

Cita:
Qt maintains hierarchies of objects. For widgets (visible elements) these hierarchies represent the stacking order of the widgets themselves, for non-widgets they merely express "ownership" of objects. Qt deletes child objects together with their parent object. While this takes care of 90% of memory handling problems it also brings some challenges and leaves a few aspects open.



quindi per esempio, se istanzio un QWidget o QDialog, nel momento in cui vado a fare la delete di questi, viene automagicamente chiamata anche la delete della roba istanziata nello heap dentro al QWidget / QDialog?

Sul serio? :better:
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: mer lug 20, 2011 5:35 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
quante ferie fa trallallero?
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: mer lug 20, 2011 8:11 pm 
Schiavo
Avatar utente
Iscritto il: dom ago 15, 2010 1:52 pm
Messaggi: 668
passa al java.

Noi abbiamo il garbage collector. :trollface:


e i cookies. :trollface:
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio lug 21, 2011 12:52 am 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
Ok chiedo su HTML.it, cancellate pure il topic

Mio ultimo post d'ora in poi lurkeró e basta

cit.


:asd:
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: sab lug 23, 2011 12:11 am 
Schiavo
Avatar utente
Iscritto il: gio apr 07, 2011 3:00 pm
Messaggi: 1367
Le QT non sono magiche, eh.
Si occupano della loro memoria, non della tua.

Se è un problema, passa a Java. :trollface:
_________________
In Soviet Italy, the evil army owns you!
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:34 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
MadJackal ha scritto:
Le QT non sono magiche, eh.
Si occupano della loro memoria, non della tua.

Se è un problema, passa a Java. :trollface:


il prossimo progetto, il più grosso della laurea, è (molto probabilmente) in java. Intanto smettila :yuno:


Per tralla:

esempio:
ho una classe
Codice:
class IscrDialog: public QDialog


nel costruttore ho tipo dei

Codice:
QVBoxLayout* v1= new QVBoxLayout(this);
    QFormLayout* f1= new QFormLayout();


poi anche altre cose, ma intanto volevo capire questo:

vengono deallocati v1 e f1 quando chiudo la finestra? sì tutti e 2/solo v1 perchè come padre gli passo this/nessuno dei due e devo ricordarmi di distruggerli nel distruttore?



Cioè in pratica devo capire meglio questo
Cita:
Qt maintains hierarchies of objects. For widgets (visible elements) these hierarchies represent the stacking order of the widgets themselves, for non-widgets they merely express "ownership" of objects. Qt deletes child objects together with their parent object. While this takes care of 90% of memory handling problems it also brings some challenges and leaves a few aspects open.


grazie :sisi:
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:37 pm 
Schiavo
Avatar utente
Iscritto il: gio nov 04, 2004 2:21 pm
Messaggi: 3640
Codice:
System.gc();


...any problems? :trollface: ...
_________________
...Hikari ti adoro...è la tazzina che mi rende così Immagine...Gore Business...sono un uomo...ho due emozioni : mangiare e scopare...se non ce l'ho in tiro fammi un toast...
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:40 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Se ovunque, nel programma qt, fai una new di oggetti tuoi senza dargli come parent un oggetto di qt, poi sta a te eliminarlo.
Se crei un oggetto qt e nel costruttore gli passi this come parent, ci pensa qt poi ad deletarlo.

Comunque per tutto il resto boost share pointers wtf :metalmetal:
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:43 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Ah, dimenticavo, il java lascialo ai ritardati :patpat:

(giusto per dare un po di audience al thread)
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:46 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
trallallero @ ha scritto:
Se ovunque, nel programma qt, fai una new di oggetti tuoi senza dargli come parent un oggetto di qt, poi sta a te eliminarlo.
Se crei un oggetto qt e nel costruttore gli passi this come parent, ci pensa qt poi ad deletarlo.

Comunque per tutto il resto boost share pointers wtf :metalmetal:



si ok però nell'esempio che ti ho messo, con i Q*Layout, non posso dare this a f1, mi dà errore in quanto mi dice che esiste già un layout per questo widget.
quindi in questo caso è "obbligatorio" che metta la delete nel distruttore giusto?

Also, il distruttore viene invocato quando c'è l'evento exit?
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:51 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
toyo @ ha scritto:
trallallero @ ha scritto:
Se ovunque, nel programma qt, fai una new di oggetti tuoi senza dargli come parent un oggetto di qt, poi sta a te eliminarlo.
Se crei un oggetto qt e nel costruttore gli passi this come parent, ci pensa qt poi ad deletarlo.

Comunque per tutto il resto boost share pointers wtf :metalmetal:



si ok però nell'esempio che ti ho messo, con i Q*Layout, non posso dare this a f1, mi dà errore in quanto mi dice che esiste già un layout per questo widget.
quindi in questo caso è "obbligatorio" che metta la delete nel distruttore giusto?

Si. Come scritto nella documentazione, qt ha bisogno di conoscere la gerarchia degli oggetti per poter poi deletare tutto nel modo giusto. Se crei un oggetto ma non dici a qt di chi è figlio, lo devi cancellare da solo.

Cita:
Also, il distruttore viene invocato quando c'è l'evento exit?

Direi di si. Ma per essere sicuro dovresti controllare la gestione eventi/signals di qt.
Sai come funziona no ? signal/connect/event e via dicendo...
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:53 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Ma perché dovresti chiamare exit() ? solo in caso di errore immagino.
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:54 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
trallallero @ ha scritto:

Si. Come scritto nella documentazione, qt ha bisogno di conoscere la gerarchia degli oggetti per poter poi deletare tutto nel modo giusto. Se crei un oggetto ma non dici a qt di chi è figlio, lo devi cancellare da solo.


ah ok. Quindi devo stare attento a tutti i layout "annidati". Oppure fare un widget per ogni layout ma sarebbe un po' uno scazzo, avrei over 9000 classi.


trallallero @ ha scritto:
Direi di si. Ma per essere sicuro dovresti controllare la gestione eventi/signals di qt.
Sai come funziona no ? signal/connect/event e via dicendo...


:sisi: , molto figa :sisi:

Grazie intanto
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:56 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
trallallero @ ha scritto:
Ma perché dovresti chiamare exit() ? solo in caso di errore immagino.



non viene chiamato exit() quando chiudo la finestra? L'ho anche ridefinito e funziona, spe che controllo.
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 1:57 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
ah no sono scemo, intendevo CloseEvent(), difatti ho cosato così

Codice:
void LegamiGui::closeEvent(QCloseEvent *event)
{
    db->salva();
    event->accept();


}



eh ho fatto un po' di ferie in mezzo al progetto :asd:
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 2:00 pm 
Schiavo
Avatar utente
Iscritto il: gio nov 04, 2004 2:21 pm
Messaggi: 3640
trallallero @ ha scritto:
Ah, dimenticavo, il java lascialo ai ritardati :patpat:

(giusto per dare un po di audience al thread)



...java calza le mie esigenze di basso QI richiesto...
_________________
...Hikari ti adoro...è la tazzina che mi rende così Immagine...Gore Business...sono un uomo...ho due emozioni : mangiare e scopare...se non ce l'ho in tiro fammi un toast...
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 2:01 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Ovviamente do per scontato che tu intenda QApplication::exit(0) e non la funzione C exit() (se poi qt abbia dei signal catcher e chiami i distruttori anche in quel caso non so, ma è più pulito ed elegante uscire chiamando la funzione di QT).

Per il resto, come t'ho detto prima, puoi usare boost::shared_ptr<type>.
Copincollo parte del mio codice:

Codice:
boost::shared_ptr<RTPWrapper::RTP_WrapperJrtplib> m_Jrtp; // dichiarazione
m_Jrtp.reset(new RTPWrapper::RTP_WrapperJrtplib(...); // alloca pointer
m_Jrtp->... // uso del pointer
m_Jrtp.reset(); // delete pointer ma non serve perché fatto in automatico da boost


Praticamente funziona come un garbage collector solo che non è per ritardati :asd:
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 2:03 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
toyo, non voglio sapere cosa ci fai con una Legami Gui :look:
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 2:06 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
eh ho scritto sopra che mi ero confuso con QCloseEvent scusa.

i boost cosi sono degli smart pointers già pronti giusto?

Perché avrei anche i miei già pronti in giro.
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 2:10 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
boost è tutto un insieme di librerie C++ open, molto facile da usare e molto efficiente.
Va dalle normali string all'asio passando per threads a mutex.
Solo NON guardare il codice di boost perché se lo fai ti senti scemo.
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 2:21 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
trallallero @ ha scritto:
boost è tutto un insieme di librerie C++ open, molto facile da usare e molto efficiente.
Va dalle normali string all'asio passando per threads a mutex.
Solo NON guardare il codice di boost perché se lo fai ti senti scemo.


ah allora non posso usarle


Legami GUI è la GUI di Legami :trollface:
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 2:40 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
toyo @ ha scritto:
ah allora non posso usarle

Uai ?

Cita:
Legami GUI è la GUI di Legami :trollface:

Ah, pensavo Légami Gui :asd:
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 3:51 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
trallallero @ ha scritto:
toyo @ ha scritto:
ah allora non posso usarle

Uai ?


direttive del prof,
Cita:
Il progetto deve compilare (e quindi eseguire) correttamente sulle macchine Linux del laboratorio informatico del plesso Paolotti con il compilatore GNU g++ 4.x. Nelle macchine Linux del laboratorio e installata la libreria Qt nella versione 4.6 (4.7 e invece l’ultima versione di Qt).



spero di non avere scleri, visto che sto usando le 4.7.
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 7:59 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Se non fai cose particolarmente complesse, non dovresti avere problemi tra 4.6 e 4.7, però io, per essere veramente sicuro, userei le 4.6.

Comunque crearsi una classe tipo shared pointers della boost, se hai dimestichezza coi templates, non è difficile. O anche cancellare tutti i pointers nel distruttore se il programma non ne ha troppi (e ricordarsi di settarli a NULL nel costruttore! è un errore molto comune e molto infido perché spesso ti va bene, poi succede che il programma crasha perché deleti un pointer che punta a sarcazzo... e per la legge di Murphy, a casa ti va bene ma a scuola ti crasha).
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [Qt/C++] Gestione Memoria
MessaggioInviato: gio ago 04, 2011 8:22 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 22, 2010 3:58 pm
Messaggi: 8404
trallallero @ ha scritto:
Se non fai cose particolarmente complesse, non dovresti avere problemi tra 4.6 e 4.7, però io, per essere veramente sicuro, userei le 4.6.


no beh ormai resto con queste, al massimo a -24h dalle deadline mi accorgo che qualcosa non funziona e devo cambiarlo e mi metto sotto come fossi gonfio di speed, sono abbastanza esperto in queste cose :asd:


trallallero @ ha scritto:
Comunque crearsi una classe tipo shared pointers della boost, se hai dimestichezza coi templates, non è difficile. O anche cancellare tutti i pointers nel distruttore se il programma non ne ha troppi (e ricordarsi di settarli a NULL nel costruttore! è un errore molto comune e molto infido perché spesso ti va bene, poi succede che il programma crasha perché deleti un pointer che punta a sarcazzo... e per la legge di Murphy, a casa ti va bene ma a scuola ti crasha).


ormai me li tengo così dai, per quanto riguarda il settarli a null, di solito lo evito, nel distruttore faccio tutto tipo if (p) delete p;
_________________
Working Vibes - L'Informazione | Controllo delle masse | Citizen Berlusconi | Storia del periodo berlusconiano | La mafia in politica | L'Ombra Oscura Della P2 | Promemoria | Borsellino: Lezione sulla mafia | Videocracy | Draquila
Top
 Profilo Non connesso  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 52 messaggi ]  Vai alla pagina 1, 2, 3  Prossimo
-->

Tutti gli orari sono UTC +1 ora


Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Vai a:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzione Italiana phpBB.it